Как объединить узлы, которые имеют одинаковое значение для свойства name в Neo4j

Я просто помещаю текстовый корпус в базу данных Neo4j. Когда я выполню MATCH (n) RETURN n Cypher-запрос возвращает несколько узлов с одинаковым именем. Как я могу объединить эти узлы в один?

Граф Визуализация моей БД узлы с одинаковым именем

1 ответ

Ваши значения имени имеют разные значения из-за прописных и строчных букв ("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]->()

Приведенный выше запрос создаст этот график:

Образец графика

Для объединения всех узлов "Java" вы можете использовать процедуру APOC 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 *

Обновим ваш график:

Обновленный график

Другие вопросы по тегам