2017-09-21 8 views
2

Je suis en train de traverser un graphique pour retracer la lignée d'un nœud spécifique. Je voudrais que ma requête cède les antécédents à ce nœud dans un premier motif de largeur. Notez que chaque noeud peut avoir plusieurs parents. Le graphique peut être profond de plusieurs couches et j'aimerais voir les résultats de tous les niveaux pour un nœud donné. J'essaye de suivre la recette this, mais courir dans l'exception Aucune propriété: rassembler. J'essaye ceci sur la version de console de gremlin 3.3Tinkerpop/Gremlin Largeur premier traversal

Répondre

3

Employez une étape barrier() (Apache TinkerPop 3.3 docs). Par exemple:

gremlin> g.V().sideEffect{println "first: ${it}"}.barrier().sideEffect{println "second: ${it}"}.iterate() 
first: v[1] 
first: v[2] 
first: v[3] 
first: v[4] 
first: v[5] 
first: v[6] 
second: v[1] 
second: v[2] 
second: v[3] 
second: v[4] 
second: v[5] 
second: v[6] 

Stephen donne une autre bonne description de BFS dans ce gremlin-users post.

D'abord, supposons une langue Gremlin sans optimisation - faire:

g.V().out().out()

se traduira par une profondeur première recherche. Vous pouvez forcer BFS avec barrière():

g.V().out().barrier().out()

qui forcera essentiellement l'étape avant le drainage avant de passer à l'étape suivante.