关于cypher:如何合并Neo4j中具有相同name属性值的节点

How to merge nodes that have the same value for name property in Neo4j

我只是将文本语料库推入Neo4j数据库。 当我执行MATCH (n) RETURN n Cypher查询时,它将返回多个具有相同名称的节点。 如何将这些节点合并为一个?

Graph Visualization of my DB
具有相同名称的节点


由于大写和小写字母,您的名称值具有不同的值(" 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]->()

上面的查询将产生此图:

Sample graph

要合并所有" 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 *

会将您的图表更新为:

Updated graph