我正在尝试使用 Gremlin 进行广度优先枚举,但是我无法找到一种方法来输出枚举期间观察到的所有步骤。我只能打印出最后一次迭代的结果。
我的问题是,给定这样的起始节点,我如何使用 Gremlin 跟踪所有路径(不知道整体深度)并打印出我沿途找到的所有内容?
study=g.v('myId')
我尝试过分散方法、循环方法(尽管如果我理解正确的话,这两种方法似乎都需要事先了解路径的实际长度)
非常感谢!
您没有提供任何重要的代码来显示您如何使用循环,但我认为通过正确的参数,您可以让它执行您想要的操作:
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,您就意味着耗尽循环。根据图表的结构,这可能是不可取的,因为您可能需要等待很长时间才能返回结果。至少您应该考虑将其设置为不可能的高值,这样如果您确实遇到了图中的某个循环,您的遍历就会中断。
第二个闭包称为“emit 闭包”。您可以阅读更多相关内容here https://github.com/tinkerpop/gremlin/wiki/Loop-Pattern#using-an-emit-closure,但基本上它决定是否应该返回管道中的中间对象(不仅仅是循环末尾的中间对象)。在本例中,您可以看到我只是将该值设置为true
这样它就会在循环的所有步骤中发出所有对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)