2017-01-09 2 views
1

Ich habe eine Datenbank in mehreren hierarchischen Bäumen organisiert. Knoten sind nach Nummer organisiert. Knoten, die mit der gleichen Nummer beginnen, sind durch Beziehungen miteinander verbunden. Zum Beispiel: (5) - [Verbinden] - (50) - [Verbinden] - (507) ... usw. Ich möchte zum Beispiel den Knoten 301 ausgehend vom ersten Elternknoten suchen: den Knoten 3. Wie mache ich diese Abfrage in der Chiffre?Suche in hierarchischen Baum auf neo4j

Antwort

1

Wenn Sie für einen bestimmten Knoten aus dem ersten Eltern beginnen suchen würde ich folgende Abfrage vorschlagen:

MATCH (n {number:1})-[:CONNECT*0..]->(n1) return n, n1; 

Diese Abfrage sucht nach dem Knoten mit der Eigenschaft number = 1 und sucht für alle Kinder, die durch CONNECT verwandt sind Beziehung. Wenn Sie für einen bestimmten untergeordneten Knoten suchen wollen, müssen Sie die Abfrage auf diese Weise ändern:

MATCH (n {number:1})-[:CONNECT*0..]->(n1 {number:101}) return n, n1; 

Im *0.. Teil, bis Sie definieren können, welcher Tiefe Sie suchen möchten, so können Sie auch für die Tiefe suchen = n mit *0..n. Diese Dokumentation ist ein guter Ausgangspunkt für die match/path-Klausel: https://neo4j.com/docs/developer-manual/current/cypher/clauses/match/

+0

Vielen Dank! Das löst mein Problem :) –

+0

Wie mache ich die Breitensuche? –

+0

Bitte schauen Sie sich https://neo4j.com/blog/graph-search-algorithm-basics/ an. Dort finden Sie nützliche Informationen. Sie können sich auch https://github.com/neo4j-contrib/neo4j-apoc-procedures ansehen, das eine Implementierung des Dijkstra-Algorithmus enthält. –