如何使用gremlin查找加权边缘范围内的所有节点?

时间:2015-09-29 11:38:40

标签: graph graph-databases gremlin tinkerpop

我正在尝试获取从给定起始节点到给定范围内的所有节点的最短路径列表。每个边都是加权的,我试图使用这些权重的总和作为范围,而不是步数。

以下适用于限制步骤,但我不确定如何正确聚合和限制路径边缘权重或返回路径。

g.v(1).out.loop(1){it.loops < 3}{true}.dedup

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

TinkerPop 3语法可能如下所示:

g.withSack(0.0f).V(1).repeat(outE()。sack(sum,'weight')。inV())。times(2).sack()。path()

输出完整路径,包括边缘,以及边缘的总重量:

==&gt; [v [4256],e [178-3a8-1lh-374] [4256-onetwo-> 4144],v [4144],e [16u-374-36d-3a0] [4144] -twothree-&gt; 4248],v [4248],3.0]

答案 1 :(得分:1)

循环步骤的it.path属性是关键。由于权重在边缘上,我们需要显式遍历它们,以便它们在路径中可见:

g.v(1).as("start").outE().inV().loop("start"){it.path.collect{it.weight==null ? 0.0 : it.weight}}.sum()<=0.3f}.dedup()

如果要遍历进出边缘,则需要添加simplePath()以防止遍历自行回转。

g.v(1).as("start").bothE().bothV().loop("start"){it.path.collect{it.weight==null ? 0.0 : it.weight}}.sum()<=0.3f}.simplePath().dedup()