【问题标题】:Neo4j-Use Gremlin to find shortest path and its traversal costNeo4j-使用 Gremlin 寻找最短路径及其遍历成本
【发布时间】:2013-03-07 14:21:50
【问题描述】:

我想将我的加权图从起始节点遍历到一定深度并打印遍历节点和累积权重。

例如,在这样的图表中:A--1--B--2--C--1--D, A--1--B--1--F--1--深度为 3 的 G 起始节点 A 应返回以下内容:A,B,F,G,cost:3

我使用以下代码取得了一些进展,但它没有计算路径的权重:

x=g.v(36);x.out('BELONGS').out('RELATED').in('BELONGS').loop(3){it.loops<10}{true}.paths{it.name}

如何编写它来计算路径的成本和遍历列表?

提前谢谢...

【问题讨论】:

    标签: path neo4j traversal gremlin shortest


    【解决方案1】:

    我认为您可以到.path,查看http://gremlindocs.com/#transform/path 并从那里计算。

    【讨论】:

      【解决方案2】:

      我尽量不要过多地修改你的 Gremlin 的前面,并从你的路径表达式的末尾计算。也许有更好的方法来解决这个问题,但这是我使用玩具图的方法:

      gremlin> g = TinkerGraphFactory.createTinkerGraph()
      ==>tinkergraph[vertices:6 edges:6]
      gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path 
      ==>[v[1], e[7][1-knows->2], v[2]]
      ==>[v[1], e[8][1-knows->4], v[4]]
      ==>[v[1], e[9][1-created->3], v[3]]
      ==>[v[1], e[8][1-knows->4], v[4], e[10][4-created->5], v[5]]
      ==>[v[1], e[8][1-knows->4], v[4], e[11][4-created->3], v[3]]
      

      因此请注意包含 outE.inV 以便边缘出现在路径中。然后我在路径上添加第二个闭包,以使重量脱离边缘:

      gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}
      ==>[marko, 0.5, vadas]
      ==>[marko, 1.0, josh]
      ==>[marko, 0.4, lop]
      ==>[marko, 1.0, josh, 1.0, ripple]
      ==>[marko, 1.0, josh, 0.4, lop]
      

      然后就是一堆 Groovy JDK 来操作那个输出到一个总和的权重:

      gremlin> g.v(1).outE.inV.loop(2){it.loops<3}{true}.path{it.name}{it.weight}.transform{it.toList().split{i->"${i}".isNumber()}}.collect{[it[0].sum(),it[1]]}
      ==>[0.5, [marko, vadas]]
      ==>[1.0, [marko, josh]]
      ==>[0.4, [marko, lop]]
      ==>[2.0, [marko, josh, ripple]]
      ==>[1.4000000059604645, [marko, josh, lop]]
      

      所以,我添加了一个转换(如 Peter 建议的那样),将项目列表拆分为权重和名称(只需检查值是否为“isNumber”...您可能需要不同的方法) 然后我在其上运行一个 map 函数来 sum() 权重集合并返回名称集合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-03
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多