【问题标题】:neo4j apoc merge nodes to one specific nodeneo4j apoc 将节点合并到一个特定节点
【发布时间】:2018-02-03 09:38:55
【问题描述】:

在我们的图中,我们有一些与 SAME_AS 边相连的人节点,因为它们都表示同一个人。

其中一个节点,名称属性以一个主要字符和一个数字开头,是主节点,所有其他节点都应合并到该节点。

任何帮助都会很棒。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    就像 Jerome 所说,您应该使用 APOC 来执行此操作,并使用 apoc.refactor.mergeNodes 过程。

    但确实,如果出现以下情况,您可能会遇到错误:

    • 未使用索引查找您的节点
    • 或者,如果您在调用过程之前在执行计划中没有急切阶段(针对您的节点)。

    所以要解决这个问题,你可以这样做:

    MATCH (n1:Person {name:$name1}),
          (n2:Person {name:$name2}),
          (n3:Person {name:$name3}),
          (n4:Person {name:$name4})
    WITH head( collect( [n1, n2, n3, n4] ) ) AS nodes
      CALL apoc.refactor.mergeNodes(nodes)  YIELD node 
      RETURN node
    

    【讨论】:

    • 感谢您的查询,但要合并的节点数量是可变的(我认为是 2-5 个节点),我们有大约 40.000 个节点与图中的 same_as-edges 连接。我刚刚在问题中添加了另一张图片。哪个查询适用于此?
    • 感谢 Benoit 的提示
    • 我的查询只是一个例子。主要部分是 collect 函数,它将在您的节点上生成急切聚合,因此允许您使用 apoc 合并过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多