Neo4j通过关系合并节点

我拥有庞大的人员数据集,并通过算法发现了很多重复项。 我在Neo4j中将这些重复项标记为有关系。 例: (p:Person)-[:同类]->(d:Person)

出于测试目的,我通过组合标记有相似关系的所有节点来创建虚拟节点。

CALL algo.unionFind.stream('Person','similar',{})
YIELD nodeId,setId
WITH setId AS idd,collect(algo.getNodeById(nodeId)) AS nodis
WHERE size(nodis) > 1
CALL apoc.nodes.collapse(nodis,{properties:'combine'}) YIELD from,rel
RETURN idd,from,rel

在这里我发现了问题,只有两个节点被比较并存储在结果数据中。 示例:

ID:5,彼得·史密斯 ID:4635,彼得·史密特(Peter Smit)

ID:4635,彼得·史密斯 ID:765,彼得·史密斯

ID:5,彼得·史密斯 ID:765,彼得·史密斯

我想重构该图并将重复项(forrest)合并到一个节点中。但是只有一个节点被合并。我该如何合并由于“相似”关系而存在的所有阿甘?

更新:

我找到了一个半解法。所有类似的人都通过以下代码合并。所有属性都合并为一个列表。对我来说似乎很好,除了Ids现在也位于列表中-但这不是问题的主题。

CALL algo.unionFind.stream('Person',collect(algo.getNodeById(nodeId)) AS nodis
CALL apoc.refactor.mergeNodes(nodis,{properties:'combine',mergeRels: true}) YIELD node
RETURN node
wwwqq20010 回答:Neo4j通过关系合并节点

如何使用唯一约束?

我在MERGE上也遇到同样的问题。

示例)

创建约束(book:Book)assert book.isbn是唯一的

本文链接:https://www.f2er.com/3019414.html

大家都在问