2017-09-21 116 views
2

我试图遍历一个图来追踪特定节点的谱系。我希望我的查询能够以广度优先模式产生该节点的前因。请注意,每个节点可以有多个父母。 Graph可以有很多层次,我希望看到给定节点的所有级别的结果。我试图沿着this配方,但遇到例外没有这样的属性:收集。我在gremlin控制台版本3.3上试用这个版本。3.3Tinkerpop/Gremlin广度优先遍历

回答

3

使用barrier()步骤(Apache TinkerPop 3.3 docs)。例如:

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在此gremlin-users post中给出了对BFS的另一个很好的描述。

首先,让我们假设一个小鬼语言没有优化 - 这样做的:

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

将导致深度优先搜索。可以强制BFS具有阻隔():

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

这基本上将迫使现有的步骤在移动到下一步骤之前流失。