2017-01-23 2 views
1

Ich bin auf der Suche nach Entitäten aus zwei Spalten zu kombinieren, die den gleichen Namen hat. Unten ist meine Beispieldatei und ich möchte, dass nur ein Knoten erstellt wird und alle Beziehungen mit diesem Knoten verknüpft werden.Kombinieren von Entitäten mit dem gleichen Namen in Cypher

Mit merge konnte ich eindeutig aus jeder Spalte auswählen und 2 Knoten für Jamie Dimon statt 4 Knoten erstellen. Aber ich möchte, dass nur ein Knoten für Jamie Dimon erstellt wird.

My Abfragestruktur bisher:


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 

Grüße Nrithya

+0

Gibt es einen Grund, warum Sie zwei verschiedene Etiketten für Ihre Entitäten verwenden? Wenn Sie nur ein einzelnes Label und MERGE für einen minimalen Satz von Eigenschaften verwenden, die das Entity definieren, können Sie Dubletten vermeiden. Können Sie auch erklären, was die Knoten-, Entitäts- und Konfidenzeigenschaften sind, und lassen Sie uns wissen, welche Eigenschaften eine eindeutige Entität darstellen: Entität? – InverseFalcon

Antwort

1

zunächst eine Eindeutigkeitsbedingung für die Eigenschaft definieren, der eindeutig einen Entity Knoten identifiziert. Lassen Sie uns name verwenden:

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

Dies wird eine Schema-Einschränkung erstellen und sicherstellen, dass keine doppelten Knoten zu der Datenbank hinzugefügt werden können (wie durch zwei Knoten mit der Bezeichnung Entity definiert, die denselben Wert für die Eigenschaft haben name). Entity-Label:

Dann, wenn Sie MERGE nur auf dieser Eigenschaft verschmelzen und SET Eigenschaften nach den MERGE: statt nur ein ein einzigen

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 * 
+0

Es kann auch nützlich sein, die Funktion [addLabels()] (https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_creating_data) von APOC-Prozeduren zu berücksichtigen, wenn Sie die Beziehung in der CSV für den Beziehungstyp statt für die name-Eigenschaft des sehr generischen REL-Beziehungstyps. – InverseFalcon

+0

Es hat funktioniert! Es hat funktioniert. Vielen Dank –

Verwandte Themen