【问题标题】:Doing depth4 and breadth4 search using gremlin python使用gremlin python进行depth4和breadth4搜索
【发布时间】:2019-03-25 01:50:26
【问题描述】:

我正在尝试使用 gremlin-python 对 Neptune 数据库进行深度 4 和广度 4 查询以收集子图(从该子图中获取所有边和顶点)。我想首先从给定顶点开始,通过选择给定顶点的前 4 个加权向外边缘向外扩展。然后,我再次对 4 个新闻节点重复相同的过程。我想总共重复这个向外查询过程 4 次。

我尝试过使用以下代码:

g.V('123').repeat(__.outE().order().by("weight",Order.decr).inV().limit(4)).times(4).toList()

但是,我收到了一个空列表。我不明白为什么,因为我也尝试过

g.V('123').repeat(__.out().limit(4)).times(4).toList()

我能够得到一些顶点(但不是我想要的,因为它们不是来自顶部加权边缘的顶点)。

有没有更好的方法来查询这个 Depth-4 和 Breadth-4 子图?提前谢谢你。

【问题讨论】:

    标签: python-3.x gremlin gremlin-server


    【解决方案1】:

    除非我遗漏了一些明显的东西,否则从语法的角度来看,您的查询看起来是正确的。也许这是海王星的一个错误?在 TinkerGraph 中,使用一些示例数据,无论有无 order() 步骤,我似乎都得到了相同的结果。如果您可以提供一个示例脚本,该脚本会在发生问题的地方生成一些数据,并且可以在 TinkerGraph 中重现,这将有助于解决问题。

    我唯一能想象的是,当您order() 返回的边缘不会进入深度 4 时,因此按照您编写的方式,不会发出任何内容。请注意,我可以证明如下:

    gremlin> g = TinkerFactory.createModern().traversal()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
    gremlin> g.V().repeat(outE().order().by('weight').inV()).times(2)
    ==>v[3]
    ==>v[5]
    gremlin> g.V().repeat(outE().order().by('weight').inV()).times(3)
    gremlin>
    

    也许您需要emit() 来帮忙看看发生了什么?

    gremlin> g.V().repeat(outE().order().by('weight').inV()).emit().times(3)
    ==>v[3]
    ==>v[2]
    ==>v[4]
    ==>v[3]
    ==>v[5]
    ==>v[3]
    ==>v[5]
    ==>v[3]
    

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2011-04-18
      • 2022-01-13
      • 2011-05-06
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多