Neo4j-Match-Knoten-Eigenschaft ODER Beziehung Eigentum
Ich versuche zu schreiben, die eine Abfrage zurückgeben, Knoten, die entweder ein match-Knoten-Eigenschaft oder eine Beziehung Eigentum.
Zum Beispiel, ich möchte alle Knoten, auf dem der name " George, ODER wenn die Beziehung Eigenschaft-status ist "good". Ich habe zwei Abfragen, erhalten Sie den Knoten für jede dieser:
MATCH (n) where n.name = 'George' return n
MATCH (n)-[r]-() where r.status = 'good' return n
Ist es eine einzelne Abfrage, die ich schreiben könnte, um diese kombinierte Ergebnisse? Ich dachte, ich könnte mit diesem optionalen Abfrage (unten), aber ich schien zu haben, falsch verstanden, die optionale match-Klausel, denn ich bin nur der erste Knoten aus der ersten Abfrage.
MATCH (n) where n.name = 'George'
Optional MATCH (n)-[r]-() where r.status = 'good' return distinct n
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch die Zeit, der optionalen match passiert, die nur
n
Knoten, das sind rund zu machen, das optionale match aus sind die diejenigen, die bereits mit dem ersten Kriterien. Sie können tun,aber für größere Grafiken denken Sie daran, dass diese nicht effizient nutzen Indizes.
Andere Möglichkeit wäre
Sollte dies besser mit Indizes für das erste match, vorausgesetzt, Sie verwenden ein label und haben den betreffenden index eingerichtet (aber der zweite Teil wäre immer noch potenziell sehr ineffizient sein).
Bearbeiten
Re Kommentar, Beziehung Indizierung machen würde, dass Teil schneller, richtig, aber meiner Meinung nach wäre es besser zu sagen, es ist langsam, weil das Muster ist underdetermined. Das zweite Muster sieht sowas
(n)
(n)
status="good"
Könnte man die Leistung verbessern, mit Beziehung indizieren, da aber eine Beziehung besteht nur zwischen den beiden Knoten, die es betrifft, man kann es stattdessen als indiziert, die durch diesen Knoten. Das ist, reparieren Sie den ersten Punkt durch den Ausschluss von Knoten, deren Beziehungen sind nicht relevant. Die beiden match-Klauseln Aussehen könnte
und/oder die Art der Beziehung
in der Tat, mit anonymen Beziehungen und die rel-Eigenschaft, würde es wahrscheinlich Sinn machen (Punkt drei), um das Eigentum der Typ, der so
Ihre tatsächlichen Abfragen können sehr unterschiedlich Aussehen, und deine Frage war nicht wirklich über die query-performance an alle 🙂 oh gut.