我正在尝试遍历一个图形以追踪特定节点的谱系。我希望我的查询以广度优先模式产生该节点的前身。请注意,每个节点可以有多个父节点。这个图可以有很多层深度,我想看到给定节点所有级别的结果。我正在尝试遵循此方法,但遇到了异常“没有这样的属性:gather”。我在gremlin控制台版本3.3上尝试这个。
使用barrier()
步骤(Apache TinkerPop 3.3文档)。例如:
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帖子中提供了BFS的另一个好描述。
首先,让我们假设Gremlin语言没有优化 - 执行以下操作:
g.V().out().out()
会导致深度优先搜索。您可以通过barrier()强制使用BFS:
g.V().out().barrier().out()
这将在继续下一步之前强制执行drain步骤。