1

以下堆栈溢出问题

如何使用 Gremlin 提高最短路径的性能?

展示了如何找到从具有 id 的单个起始顶点到具有 id687的结束顶点的最短路径,并通过使用、和1343确保没有重复路径来有效地做到这一点storewithoutaggregate

g.V(687).store('x').repeat(out().where(without('x')).aggregate('x')).until(hasId(1343)).limit(1).path()

我想以相同的效率执行相同的查询,但是我需要从具有相同标签的多个起始顶点到相同结束顶点的所有最短路径,例如它看起来像这样(尽管这不是工作)

g.V().hasLabel('label').store('x').repeat(out().where(without('x')).aggregate('x')).until(hasId(1343)).limit(1).path()

我在语句中尝试了多个具有两次重复的构造,但无法store('x')为每个起始顶点获得独立的。我也在使用AWS Neptune平台,因此它限制了 Gremlin 在不允许循环/脚本的情况下的使用。所有 gremlin 查询必须以g..

https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html

4

1 回答 1

2

此技术不能应用于多个起始顶点。但是,您可以从另一侧开始,因为这是一个已知的顶点:

g.V(1343).store('x').
  repeat(__.in().where(without('x')).aggregate('x')).
    until(hasLabel('label')).
  path()

如果一个起始顶点可以是另一个起始顶点路径的一部分,那么您可能不会在潜在的起始顶点处中断,而是这样做:

g.V(1343).store('x').
  repeat(__.in().where(without('x')).aggregate('x')).
    emit(hasLabel('label')).
  path()
于 2018-09-11T14:50:07.210 回答