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

How to find all nodes within a range of weighted edges with gremlin?

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

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

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

感谢您的帮助!

循环步骤的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()

TinkerPop 3 语法可能如下所示:

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

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

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