2016-05-13 13 views
0

Ich verwende OrientDB Community Edition 2.1.16.Abrufen aller Pfade von einem Knoten

Dies ist die grafische Darstellung meiner Daten:

enter image description here

Ich versuche, alle Pfade für gegebenen Knoten abzurufen mit:

select $path from (traverse out('E1') from #13:5) 

Aber was ich, es ist ziemlich seltsam erhalten:

enter image description here

Ich hätte erwartet, dass jeder Pfad, der Knoten zweiter Ebene durchläuft (# 13: 1, # 13: 2, # 13: 3), den Wurzelknoten (# 13: 0) erreicht hätte. Etwas wie:

(#13:5).out[0](#13:4).out[0](#13:1).out[0](#13:0) 
(#13:5).out[0](#13:4).out[1](#13:2).out[0](#13:0) 
(#13:5).out[0](#13:4).out[2](#13:3).out[0](#13:0) 

Es ist das richtig, oder was?

Wenn ja, gibt es die Möglichkeit, dieses Ergebnis zu erhalten? Ich meine, einen vollständigen Pfad von # 13: 5 zu # 13: 0 zu haben, der durch die Knoten der zweiten Ebene geht.

Dank

Antwort

0

Das Ergebnis, das Sie über die Strategie erhalten, hängt hat die Traverse, Sie zwei Arten einstellen: DEPTH_FIRST, die Standardeinstellung und BREADTH_FIRST. Ich denke, vielleicht interessieren Sie sich für die beiden Strategien. Für weitere Informationen können Sie diese link betrachten.

DEPTH_FIRST Strategie

Dies ist die Standardstrategie von Orientdb für Traversal verwendet. Es erforscht so weit wie möglich entlang jeder Verzweigung vor dem Zurückverfolgen. Es ist mit Rekursion implementiert. Um mehr zu erfahren, schauen Sie sich den Depth-First-Algorithmus an. Unterhalb der geordneten Schritte ausgeführt, während die Grafik DEPTH_FIRST Strategie durchlaufen:

Tiefe-first-Baum enter image description here

BREADTH_FIRST Strategie

Es prüft alle benachbarten Knoten, dann für jeden dieser Nachbarknoten wiederum überprüft es ihre Nachbarknoten, die nicht besucht wurden, und so weiter. Vergleichen Sie BREADTH_FIRST mit der äquivalenten, aber speichereffizienteren iterativen Vertiefung der DEPTH_FIRST-Suche und des Kontrastes mit der DEPTH_FIRST-Suche. Um mehr zu wissen, schauen Sie sich den Breadth-First-Algorithmus an. Unterhalb der geordneten Schritte ausgeführt, während die Grafik durchqueren mit BREADTH_FIRST Strategie:

Breiten ersten Baum enter image description here

0

mit Ihrer Anfrage

select $path from (traverse out('E1') from #13:5) 

Sie den Pfad relativ zu jedem Ergebnis der Traverse erhalten, Sie können, dass durch Zugabe des *

select *,$path from (traverse out('E') from #9:5) 

In th überprüfen Auf diese Weise erhalten Sie alle durchfahrenen Punkte und den Pfad vom Startknoten dorthin.