2016-09-29 3 views
0

Ich muss Beziehungen zwischen allen Knoten erstellen, die dieselben Eigenschaftswerte haben.Beziehungen zwischen Knoten mit denselben Eigenschaften erstellen

Zum Beispiel kann ich die folgende Abfrage verwenden:

match (p1:Person), (p2:Person) 
where p1 <> p2 and p1.someproperty = p2.someproperty 
merge(p1)-[r:Relationship]-(p2) 
return p1,r, p2 

Aber wenn ich über 200k von Knoten haben, dieses Skript ziemlich lang läuft.

Gibt es andere schnellere Möglichkeiten zum Erstellen solcher Beziehungen?

Dank

Antwort

1

Die Abfrage Sie zunächst ein kartesisches Produkt zwischen allen Paarungen von Person Knoten erstellt schrieb, dann auf jeder Paarung diejenigen zu finden, dass das Filtern, die tatsächlich verwandt sind, erstellt dann die Beziehung. Das ist sehr teuer, eine Operation.

Stattdessen möchten Sie möglicherweise nur einmal durch alle Personenknoten gehen und den entsprechenden Personenknoten mit der Eigenschaft suchen und die Beziehung erstellen.

Auch sollten Sie eine stark erhöhte Leistung sehen, wenn Sie entweder einen Index oder eine eindeutige Einschränkung für die betreffende Eigenschaft haben. Andernfalls wird bei jedem Vergleich ein Knoten-Scan über alle Knoten in diesem Label durchgeführt, ein weiterer Faktor für die Langsamkeit Abfrage.

Ich ermutige Sie auch, die Knoten und die Beziehung nicht zurückzugeben, vorausgesetzt, dass es in der Nachbarschaft von Tausenden oder Hunderttausenden von Ergebnissen ist. Das ist wahrscheinlich ein weiterer Faktor.

match (p1:Person) 
with p1 
match (p2:Person) 
where p2.someproperty = p1.someproperty and p1 <> p2 
merge(p1)-[r:Relationship]-(p2) 

sollten Sie in der Lage sein, sowohl diese Abfrage und Ihre alten zu erklären und sehen, wie sie sind beide gehen zu laufen.

+0

vielen dank! Das funktioniert gut für mich –

Verwandte Themen