2016-04-07 14 views
1

Angenommen, ich habe folgende Beziehungen in neo4j gespeichert.Machen Sie Beziehung basierend auf anderen Beziehungen in Neo4j?

Hier A, C sind die gleichen Label-Knoten und B, E sind auch von gleichen Label-Knoten. Wie lautet die Abfrage, wie viele Knoten A und C gemeinsam haben? Darauf aufbauend möchte ich zu einer Beziehung zwischen A und C kommen. Ich würde gerne einen Beziehungsrang zwischen ihnen hinzufügen und ihm einen Wert geben, sagen wir 0,5, weil 1 Knoten gemeinsam ist. Wie würde diese Abfrage aussehen?

Antwort

0

Um die Anzahl der gemeinsamen Knoten zwischen A und C Spiel zurückzukehren ein Muster, das A an ein und C a das andere mit einem Zwischenknoten hat. Zählen Sie dann die Vorkommen des Zwischenknotens.

match (:TypeOne {name: 'A'})--(common)--(:TypeOne {name: 'C'}) 
return count(common) 

Wenn Sie eine Beziehung direkt zwischen A und C als Ergebnis des Spiels dann erstellen möchten verwenden merge oder create mit dem A und C Knoten. Und verwenden Sie set, um der neu erstellten Beziehung einen Wert hinzuzufügen.

So etwas sollte Ihren Anforderungen entsprechen.

match (a:TypeOne {name: 'A'})--(common)--(c:TypeOne {name: 'C'}) 
with a, c, count(common) as in_common 
merge (a)-[rel:COMMON_WITH]->(c) 
set rel.value = in_common * 0.5 
return * 
+0

aber angenommen, ich habe eine CSV-Datei und es gibt verschiedene Knoten gleichen Typs A, C, dann muss ich die Beziehungen zwischen all diesen Knoten machen nach gemeinsamen Knoten zwischen them.Then was die Abfrage enthalten sein sollte? –

+0

Ich nehme an, jede Zeile der CSV-Datei enthält die Schlüssel (oder einen Bezeichner) für die zwei Knoten, die gesucht werden. Und Sie würden die Übereinstimmungen ** A '** und **' C '** in der obigen Abfrage durch die tatsächlichen Knoten ersetzen, nach denen Sie suchen (z. B. line.a_node und line.c_node). –

Verwandte Themen