2
我试图遍历一个图来追踪特定节点的谱系。我希望我的查询能够以广度优先模式产生该节点的前因。请注意,每个节点可以有多个父母。 Graph可以有很多层次,我希望看到给定节点的所有级别的结果。我试图沿着this配方,但遇到例外没有这样的属性:收集。我在gremlin控制台版本3.3上试用这个版本。3.3Tinkerpop/Gremlin广度优先遍历
我试图遍历一个图来追踪特定节点的谱系。我希望我的查询能够以广度优先模式产生该节点的前因。请注意,每个节点可以有多个父母。 Graph可以有很多层次,我希望看到给定节点的所有级别的结果。我试图沿着this配方,但遇到例外没有这样的属性:收集。我在gremlin控制台版本3.3上试用这个版本。3.3Tinkerpop/Gremlin广度优先遍历
使用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()
这基本上将迫使现有的步骤在移动到下一步骤之前流失。