Ich beginne mit Neo4j und wundere mich über die Knoten zu einem anderen Knoten an einer Länge von höchstens k Kanten (Freund eines Freundes eines Freundes ... bis k-mal) zu finden. Ich werde mit dem Beispiel aus dem Tutorial in Neo4j selbst illustrieren (Ich habe Grafik-Erstellung Befehle sind am unteren Rand).Cypher verhindern das Aufzählen aller Pfade
Diese Abfrage würde Knoten zurückgeben, die mit Emil verbunden sind, und Knoten, die mit diesen Knoten verbunden sind. Mein Problem ist, dass es scheint, dass dies JEDEN Pfad der Länge 1-2 von Emil auflistet, obwohl es mir egal ist, alle Pfade aufzählen. Aus der Abfrage geht klar hervor, dass mir nur die Knoten wichtig sind, die in dieser Entfernung mit Emil verbunden sind, und das Aufzählen aller möglichen Pfade ist ein schlechter Weg, diese Abfrage zu realisieren. Dies ist ein Problem in großen, dichten Graphen, da die Komplexität überwältigend wird.
Entfernen Sie DISTINCT und es wird 8 Datensätze geben, das ist die Anzahl der eindeutigen 1-2 Länge Pfade von Emil. Basierend auf meinen Tests in größeren Diagrammen scheint DISTINCT ein Post-Processing-Schritt zu sein, der die Laufzeit der Abfrage nicht beeinflusst, obwohl die redundante Ausgabe eliminiert wird. Ist das korrekt?
Meine Hauptfrage, gibt es eine Möglichkeit, eine Cypher-Abfrage für dieses Problem zu bilden, so dass ich nicht alle eindeutigen Pfade durchquere und die Komplexität reduziert werden kann? Bitte lassen Sie mich wissen, wenn ich irgendwo ein Missverständnis habe.
---- Befehle die Grafik -----
CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })
CREATE (js:Person { name: "Johan", from: "Sweden", learn: "surfing" }),
(ir:Person { name: "Ian", from: "England", title: "author" }),
(rvb:Person { name: "Rik", from: "Belgium", pet: "Orval" }),
(ally:Person { name: "Allison", from: "California", hobby: "surfing" }),
(ee)-[:KNOWS {since: 2001}]->(js),(ee)-[:KNOWS {rating: 5}]->(ir),
(js)-[:KNOWS]->(ir),(js)-[:KNOWS]->(rvb),
(ir)-[:KNOWS]->(js),(ir)-[:KNOWS]->(ally),
(rvb)-[:KNOWS]->(ally)
Danke! Beide sind genau das, wonach ich suche. – steve