【问题标题】:Finding all path with specific edge types in Tinkerpop 3在 Tinkerpop 3 中查找具有特定边缘类型的所有路径
【发布时间】:2014-12-22 13:30:29
【问题描述】:

我想找到“朋友”边缘的所有可用路径:

g.v(1).out("friend").out("friend").....

所以结果将是来自 v(1) 的所有路径,可以通过这种边缘类型连接。如果我也可以限制搜索长度并且可以有多个边缘类型而不是“朋友”,那就太好了,比如:

g.v(1).out("friend" or "enemy").out("friend" or "enemy). .....

如果我有两个节点并且想要查找所有路径/最短路径,那么 gremlin 方式会是什么?

【问题讨论】:

    标签: gremlin tinkerpop tinkerpop3


    【解决方案1】:

    使用jump递归遍历一条路径,使用path步骤实现遍历的路径:

    gremlin> g = TinkerFactory.createClassic()
    ==>tinkergraph[vertices:6 edges:6]
    gremlin> g.V(1).as('x').out('knows').jump('x'){it.loops<3}{true}
    ==>v[2]
    ==>v[4]
    gremlin> g.V(1).as('x').out().jump('x'){it.get().id() != 5 && it.loops < 6}.path()
    ==>[v[1], v[4], v[5]]
    

    在 GremlinDocs 中查看更多详细信息:

    【讨论】:

    • 感谢您的回答,但我的问题是发现:g.v(1).out("friend" or "enemy").out("friend" or "enemy). ... 所以递归地找到所有可能的路径形式 g.v(1).out('knows').out('knows'). .... 如果我可以限制它会很棒。我的第二个问题是两个节点找到所有可能的路径他们之间。
    • 更新了我的答案以反映您对问题的澄清
    • 这是 Tinkerpop3 的方式吗? (我以为 Tnkerpop3 中没有循环了?)
    • 更新了 TP3 的答案 - 很抱歉在您的问题中错过了这一点。
    • 我听不懂.loops,我不知道我想走多少步,我只想走我找到“知道”的步数,当我不知道的时候使用循环它不起作用
    【解决方案2】:

    我会这样做:

    g.V(1).as('x').out('knows').loop('x'){it.loops<100}{true}
    

    意思是从顶点 1 通过“知道”的边缘出去,并继续这样做,直到你完成了 100 次。不用说,它将返回以这种方式连接的顶点列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多