如何合并Neo4j中具有相同name属性值的节点 [英] How to merge nodes that have the same value for name property in Neo4j

查看:1012
本文介绍了如何合并Neo4j中具有相同name属性值的节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I just push text corpus into Neo4j database. When I execute MATCH (n) RETURN n Cypher query, it returns multiple nodes with the same name. how can I merge these nodes as one?

具有相同名称的节点

推荐答案

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

Your name values have different values because of upper and lower case letters ("Java" and "java" are different).

我复制了您的场景,创建了一个示例数据集:

I reproduced your scenario creating a sample data set:

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]->()

上面的查询将产生此图:

The above query will produce this graph:

要合并所有"Java"节点,可以使用 APOC程序 apoc.refactor.mergeNodes(nodes).运行以下查询:

To merge all "Java" nodes you can use the APOC Procedure apoc.refactor.mergeNodes(nodes). Running the following query:

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中具有相同name属性值的节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆