Объединение сущностей с одинаковыми именами в шифре
Я ищу объединить сущности из двух столбцов, которые имеют одинаковое имя. Ниже приведен пример набора данных, и я хочу, чтобы был создан только один узел и все связи были связаны с этим узлом.
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 *