How to merge nodes that have the same value for name property in Neo4j
我只是将文本语料库推入Neo4j数据库。 当我执行MATCH (n) RETURN n Cypher查询时,它将返回多个具有相同名称的节点。 如何将这些节点合并为一个?

具有相同名称的节点
-
您的节点中只有name属性吗?
-
另外,是否可以存在两个以上具有相同名称的节点?例如,带有name = Java的3个节点。
-
是的,节点只有名称属性,并且存在多个具有相同名称的节点
-
多于两个同名节点?
-
抱歉,我在上一条评论中犯了一个错误。我需要知道是否可以有两个以上具有相同名称的节点。
-
是的i.stack.imgur.com/ThrdU.png
-
AkhilTC-让我知道我提供的答案是否解决了您的问题。谢谢。
-
布鲁诺·佩雷斯(Bruno Peres)-我尝试了您提出的查询,但问题没有解决
-
我尝试了您建议的查询,但显示错误消息Neo.ClientError.Procedure.ProcedureRegistrationFailed apoc.refactor.mergeNodes不可用,因为它已沙箱化并且在沙箱外部具有依赖项。沙箱由dbms.security.procedures.unrestricted设置控制。您只有信任的无限制过程才能访问数据库内部。
-
AkhilTC-这是因为应安装APOC程序。看一下"安装"部分。
由于大写和小写字母,您的名称值具有不同的值(" Java"和" java"不同)。
我复制了您的场景,创建了一个示例数据集:
1 2 3 4 5 6 7 8 9
| CREATE (n1:Node {name :"Java"}),
(n2:Node {name :"Java"}),
(n3:Node {name :"java"}),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n3)-[:TYPE]->() |
上面的查询将产生此图:
要合并所有" Java"节点,可以使用APOC过程apoc.refactor.mergeNodes(nodes)。 运行以下查询:
1 2 3 4 5 6 7
| MATCH (n:Node)
// using toLower function to group nodes with the same name but
// different cases (eg Java, java, javA)
WITH toLower(n.name) as name, collect(n) as nodes
// passing the nodes collection to mergeNodes APOC procedure
CALL apoc.refactor.mergeNodes(nodes) yield node
RETURN * |
会将您的图表更新为:
-
我正在使用Neo4j映射API中的状态转换。 我的关系也有一个属性。 关系是响应代码的计数。 我想将它们包括财产合并在一起。 (API_1)-[:CALLS {2xx:1}]->(API_2)(API_1)-[:CALLS {4xx:1}]->(API_2)(API_1)-[:CALLS {2xx:2}]- >(API_2)(API_1)-[:CALLS {4xx:3}]->(API_2)所需的合并结果:(API_1)-[:CALLS {2xx:3,4xx:4}]->(API_2)是这 可能,我不确定