【问题标题】:Breadth First enumeration in GremlinGremlin 中的广度优先枚举
【发布时间】:2013-07-24 08:31:43
【问题描述】:

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

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

study=g.v('myId')

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

非常感谢!

【问题讨论】:

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


    【解决方案1】:

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

    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,以便它会在循环的所有步骤中发出所有对象。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 2013-05-06
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多