永久查询加载

时间:2019-05-08 07:14:39

标签: neo4j cypher

我有一个查询,该查询将使用节点属性之一为我创建一个双标签。我可以看到如何在Neo4j浏览器中创建标签,但查询仍会加载。

MATCH (n:Disease)
CALL apoc.create.addLabels( id(n), [ n.STY ] ) YIELD node
REMOVE node.STY
RETURN node;

我希望此查询将完成加载。有人可以向我解释为什么这个查询会永远加载吗?有解决办法吗?

1 个答案:

答案 0 :(得分:1)

以下是对每个Disease节点采取的操作:

  • 获取节点
  • 获取其STY属性值
  • 调用APOC程序。该过程将:
    • 再次获取节点
    • 添加标签
    • 将节点返回主查询
  • 删除STY属性
  • 返回节点

如果有大量Disease节点,则可能需要很长时间。这里有一些建议。

并且您应该考虑将这样的大型事务分解为多个较小的事务,因为这可以减少数据库服务器所需的资源量。 apoc.periodic.commit可以帮助您。

此外,如果不同的STY值的数量相对较少,则减少APOC呼叫的数量可能会有所帮助,例如:

MATCH (n:Disease)
WITH n.STY AS sty, COLLECT(n) AS ns
CALL apoc.create.addLabels(ns, [ sty ] ) YIELD node
REMOVE node.STY;

请注意,上面的查询也不会费心返回每个 Disease节点,因为这可能会导致接收结果的任何问题(例如neo4j Browser无法处理大型结果会及时耗尽,可能会耗尽内存。)