如何在Neo4j中合并名称属性具有相同值的节点

时间:2018-02-21 06:21:09

标签: neo4j cypher graph-databases

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

Graph Visualization of my DB nodes having same name

1 个答案:

答案 0 :(得分:4)

由于大写和小写字母,您的名称值具有不同的值(" Java"" java"不同)。

我重现了你的场景,创建了一个样本数据集:

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 Procedure apoc.refactor.mergeNodes(nodes)。运行以下查询:

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