宽度格雷姆林中的第一个枚举

时间:2013-07-24 08:31:43

标签: java graph breadth-first-search gremlin graph-traversal

我正在尝试使用Gremlin进行广泛的首次枚举,但是我无法找到输出枚举期间观察到的所有步骤的方法。我只能打印出最后一次迭代的结果。

我的问题是,考虑到这样的起始节点,我如何使用Gremlin跟踪所有路径(不知道总体深度)并打印出我沿途找到的所有内容?

study=g.v('myId')

我尝试过分散方法,循环方法(虽然如果我理解正确,两者似乎都需要事先知道路径的实际长度)

非常感谢!

1 个答案:

答案 0 :(得分:4)

您没有提供显示您如何使用循环的重要代码,但我认为使用正确的参数可以让它做您想做的事情:

gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).as('x').out.gather.scatter.loop('x'){true}{true}
==>v[2]
==>v[4]
==>v[3]
==>v[5]
==>v[3]

我假设您通过收集/分散以及指向x的循环的第一部分来理解代码。因此,考虑到这一假设,我将重点关注传递给循环的两个闭包。

传递给循环的第一个闭包告诉Gremlin何时突破循环。通过简单地返回true,你就说要耗尽循环。根据图表的结构,这可能是不可取的,因为您可能需要等待很长时间才能返回结果。至少你应该考虑将它设置为不可思议的高度,这样如果你在图表中遇到一些周期,你的遍历就会中断。

第二个闭合被称为"发出闭合"。您可以阅读有关它的更多信息here,但基本上它确定是否应该返回管道中的中间对象(而不仅仅是循环末尾的对象)。在这种情况下,您可以看到我只是将该值设置为true,以便它将在循环的所有步骤中发出所有对象。