我拥有庞大的人员数据集,并通过算法发现了很多重复项。我在Neo4j中将这些重复项标记为有关系。例:(p:人物)-[:相似]->(d:人物)
出于测试目的,我通过组合标记有相似关系的所有节点来创建虚拟节点。
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', 'similar', {})
YIELD nodeId,setId
WITH setId AS idd, collect(algo.getNodeById(nodeId)) AS nodis
CALL apoc.refactor.mergeNodes(nodis, {properties:'combine', mergeRels: true}) YIELD node
RETURN node
我拥有庞大的人员数据集,并通过算法发现了很多重复项。我在Neo4j中将这些重复项标记为有关系。例如:(p:Person)-[:相似]->(d:Person)用于测试...
如何使用唯一约束?
我也遇到了与MERGE相同的问题。