使用gremlin脚本和neo4j我尝试找到两个节点之间的所有路径,最多降低10个级别。但是我从REST API得到的所有响应都是
java.lang.ArrayIndexOutOfBoundsException: -1
这是脚本:
x = g.v(2)
y = g.v(6)
x.both.loop(10){!it.object.equals(y)}.paths
我查看了文档,但找不到与此用例相关的任何内容。
答案 0 :(得分:1)
在Gremlin中,loop
的参数是你想要去的步数,并且评估闭包以确定何时突破循环。在这种情况下,因为你有loop(10)
它会回到太远到未定义管道的点。关于闭包,你不仅需要检查对象是否是相关的对象,在这种情况下你应该停止,还要检查你是否已经完成了10个循环。
你真正想要的是这样的东西:
x.both.loop(1){!it.object.equals(y) && it.loops < 10}.paths
但是,我应该补充一点,如果图中有一个循环,这将很乐意一遍又一遍地遍历循环并导致太多路径。您可以应用一些聪明的filter
和sideEffect
来避免多次访问节点。
有关详细信息,请参阅Loop Pattern Page on the Gremlin Wiki。