JanusGraph上使用Gremlin限制最短路径查询深度

JanusGraph上使用Gremlin限制最短路径查询深度,graph,gremlin,shortest-path,tinkerpop,janusgraph,Graph,Gremlin,Shortest Path,Tinkerpop,Janusgraph,我在JanusGraph中有一个相当大的图(目前有3806702个顶点和7774654条边,所有边都有相同的标签)。我对最短路径搜索感兴趣。小精灵食谱提到了这个问题: g.V(startId).直到(hasId(targetId)).重复(out().simplePath()).path().limit(1) 这会立即返回我知道是正确的路径,但随后会挂起控制台(top显示janusgraph和scylla正在疯狂地处理东西,所以我猜它是在后台工作的,但这需要永远)。如果像这样使用,它会做正确的事

我在JanusGraph中有一个相当大的图(目前有3806702个顶点和7774654条边,所有边都有相同的标签)。我对最短路径搜索感兴趣。小精灵食谱提到了这个问题:

g.V(startId).直到(hasId(targetId)).重复(out().simplePath()).path().limit(1)

这会立即返回我知道是正确的路径,但随后会挂起控制台(
top
显示janusgraph和scylla正在疯狂地处理东西,所以我猜它是在后台工作的,但这需要永远)。如果像这样使用,它会做正确的事情并返回第一条(正确的)最短路径:

g.V(startId).直到(hasId(targetId)).重复(out().simplePath()).path().next()

我想限制这个查询,以便gremlin/janusgraph停止搜索超过100跳的路径(因此我希望最大深度基本上为100条边)。我曾尝试在多个位置使用
.times(100)
,但如果在同一查询中
.times()
一起使用
.times()
,则在gremlin遍历类中总是会出现NullPointerException崩溃,即:

java.lang.NullPointerException
        at org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper.hasStepOfAssignableClassRecursively(TraversalHelper.java:351)
        at org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy.apply(RepeatUnrollStrategy.java:61)
        at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies.applyStrategies(DefaultTraversalStrategies.java:86)
        at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.applyStrategies(DefaultTraversal.java:119)
        at org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.next(DefaultTraversal.java:198)
        at java_util_Iterator$next.call(Unknown Source)
...
有没有人知道我该如何应用这样的限制?我需要这个来快速返回第一个结果或失败


谢谢

until()
中添加另一个中断条件,并确保在请求路径之前
limit()
结果:

g.V(startId).
  until(__.hasId(targetId).or().loops().is(100)).
    repeat(__.both().simplePath()).
  hasId(targetId).limit(1).path()
在此遍历中调用
tryNext()
将为您提供一个
可选的
。如果为空,则在给定距离内找不到路径