bugfix> graph > 投稿

JanusGraphにはかなり大きなグラフ(現在3806702の頂点と7774654のエッジ、すべて同じエッジのラベル)があります。最短パス検索に興味があります。グレムリンのレシピでは、このクエリに言及しています。

g.V(startId).until(hasId(targetId)).repeat(out().simplePath()).path().limit(1)

これにより、正しいパスであることがわかっているパスがすぐに返されますが、コンソールがハングします( top janusgraphとscyllaがものを猛烈に処理していることを示しているので、ワーキング バックグラウンドで、しかしそれは永遠にかかります)。次のように使用すると、正しい処理が行われ、最初の(正しい)最短パスが返されます。

g.V(startId).until(hasId(targetId)).repeat(out().simplePath()).path().next()

gremlin/janusgraphがパスオーバー、たとえば100ホップの検索を停止するように、このクエリを制限します(したがって、基本的には100エッジの最大深度が必要です)。 .times(100) を使用しようとしました複数の位置にあるが、 .until() の場合 .times() で使用されます同じクエリで、グレムリントラバーサルクラスの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)
...

誰がそのような制限をどのように適用することができますか?最初の結果を返すか失敗するために、これが必要です。

ありがとう!