2017-07-27 8 views
2

Gerade jetzt, ein Unter Graph von Neo4j zurückzukehren, benutze ichHolen Sie sich alle untergeordneten Knoten rekursiv

Match(n{id:"<uuid>"}) OPTIONAL MATCH (n)-[*..25]->(m) RETURN DISTINCT *

Diese für tief miteinander verbundenen Graphen sehr ineffizient ist (wie ohne RETURN DISTINCT, erhalte ich 100k Ergebnisse als apposed zu einem lumpigen Ergebnis unter 100.

Wie fordere ich effizient alle Unterknoten eines Knotens ohne Verwendung von APOC an? (AKA, mache das DISTINCT redundant statt in der passenden; AKA, besuche jeden Knoten nur einmal während des Abgleichens ?)

+0

Können Sie eine minimale Tiefe von mehr als 1 hinzufügen? Oder gibt es eine Regel zur Bestimmung von (m)? Keine Möglichkeit, einen einzelnen Besuch ohne APOC zu erzwingen. –

+0

@DaveBennett Ich weiß nicht einmal, ob sie irgendwelche Kinder sind (daher verwende ich optionale Übereinstimmung, anstatt sie nur zu vergleichen). Sonst, wird nicht die Mindestgrenze zu erhöhen einige der unmittelbaren Kinder verpassen? Ich weiß nur, dass der Sub-Graph 0-25 Knoten tief ist. (25 ist nur meine willkürlich abgeschnitten) – Tezra

+0

Es ist nur, dass Kind Erweiterungen scheint so einfach und einfach, dass ich APOC dafür nicht brauchen sollte. – Tezra

Antwort

0

Für Neo4j 3.2.x, (Start) - [* .. 25] -> (Kinder) verhält sich wie gewünscht.

Davor müssen Sie die APOC erweitern verwenden Funktion apoc.path.spanningTree

Verwandte Themen