Ich habe eine neo4j-Instanz, in der ich mehrere Arten von Knoten (Labels) habe, jede mit ihren eigenen Eigenschaften. So ich sagen haben:Neo4J: Cypher, um über alle Knoten und alle Eigenschaften zu suchen
Bezeichnung "Person" mit Eigenschaften ("Name", "Adresse", "Name des Vaters")
Bezeichnung "Location" mit Eigenschaften ("Namen", "Land", "City")
Etikett „Ereignis“ mit Eigenschaften („Name“, „Stadt“, „Country“)
und so weiter ...
nun eine Möglichkeit für eine Abfrage wie „xyz“, wenn ich das wissen zu suchen ist Besonderheiten:
Say: match (n: Person) in dem n.Name = "xyz" RETUEN n
Meine Frage ist, gibt es eine einzige 'effiziente' Abfrage, die eine Blindsuche durchführen kann. Grundsätzlich sollte es in der Lage sein, alle Labels und alle Eigenschaften zu durchsuchen und mir die passenden Knoten zu geben. Also eine einzige Abfrage, um 'xyz' mit allen Eigenschaften von Personen, Orten, Ereignissen und anderen Labels in meiner Datenbank abzugleichen.
Ich verstehe, eine Möglichkeit könnte eine extrem lange where-Klausel verwenden, wobei ich alle meine Etiketten und ihre jeweiligen Eigenschaften fest codiere, aber ich suche nicht danach. Gibt es eine starightforward neo4j Cypher, um dies zu tun?
Dank Abhi
Hallo Stefan, Danke. Die Abfrage funktioniert, aber wie von Ihnen erwähnt, ist extrem langsam. Momentan ist mein Graph nur ein paar Millionen Knoten und die Abfrage braucht Zeit. Ich verstehe, dass dies nicht skalierbar ist. Vermutlich ist die Integration von Neo4j mit Solr/Lucene eine Option. Also können alle universellen Suchanfragen auf Lucene gerichtet sein, weil ich glaube, dass es für solche Szenarien besser optimiert ist? – user1826116
Wir hatten dasselbe Problem und konnten Apache Solr umgehen. Die Leistung ist ziemlich gut, muss aber mit neo4j synchronisiert werden, wenn Sie Änderungen an db vornehmen, was der einzige Nachteil ist, dem wir gegenüberstehen. –