Объединение сущностей с одинаковыми именами в шифре

Я ищу объединить сущности из двух столбцов, которые имеют одинаковое имя. Ниже приведен пример набора данных, и я хочу, чтобы был создан только один узел и все связи были связаны с этим узлом.

Entity0      | Entity1    | Relationship | 
__________________________________________
Jamie Dimon  | Mit Romney  | friends
__________________________________________
Jamie Dimon  | Jamie Dimon | colleague
__________________________________________
Mason White  | Jamie Dimon | sibling

Используя слияние, я мог выбрать уникальные из каждого столбца и создать 2 узла для Джейми Даймона вместо 4 узлов. Но я хочу, чтобы для Джейми Даймона был создан только один узел.

Моя структура запросов пока:


LOAD CSV WITH HEADERS FROM 'file:/final_neo4j.csv' AS line 
MERGE (e0:Entity0 {node: line.relation_first, name: line.entities_0_name, entity: line.entities_0_entity, confidence: toFloat(line.entities_0_confidence) }) 
WITH line, e0 
MERGE (e1:Entity1 {node: line.relation_second, name: line.entities_1_name, entity: line.entities_1_entity, confidence: toFloat(line.entities_1_confidence) })
WITH e0, e1, line 
MERGE (e0)-[r:Rel {name : line.relation_relation, confidence: toFloat(line.relation_confidence), url: line.url }]->(e1) 
RETURN e0,r,e1

С уважением, Нритя

1 ответ

Решение

Сначала определите ограничение уникальности для свойства, которое однозначно идентифицирует Entity узел. Давайте использовать name:

CREATE CONSTRAINT ON (e:Entity) ASSERT e.name IS UNIQUE;

Это создаст ограничение схемы и гарантирует, что повторяющиеся узлы не могут быть добавлены в базу данных (как определено двумя узлами с меткой Entity которые имеют одинаковое значение для свойства name).

Потом, когда ты MERGE только слиться с этим свойством и SET свойства после MERGE:

LOAD CSV WITH HEADERS FROM 'file:/final_neo4j.csv' AS line 
MERGE (e0:Entity {name: line.Entity0})
ON CREATE SET e0.confidence = toFloat(line.entities_0_confidence)
MERGE (e1:Entity {name: line.Entity1})
ON CREATE SET e1.confidence = toFloat(line.entities_1_confidence)
MERGE (e0)-[r:REL {name:line.Relationship]->(e1)
RETURN *
Другие вопросы по тегам