找到两个节点之间的所有路径

时间:2011-09-25 11:24:01

标签: neo4j

使用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

我查看了文档,但找不到与此用例相关的任何内容。

1 个答案:

答案 0 :(得分:1)

在Gremlin中,loop的参数是你想要去的步数,并且评估闭包以确定何时突破循环。在这种情况下,因为你有loop(10)它会回到太远到未定义管道的点。关于闭包,你不仅需要检查对象是否是相关的对象,在这种情况下你应该停止,还要检查你是否已经完成了10个循环。

你真正想要的是这样的东西:

x.both.loop(1){!it.object.equals(y) && it.loops < 10}.paths

但是,我应该补充一点,如果图中有一个循环,这将很乐意一遍又一遍地遍历循环并导致太多路径。您可以应用一些聪明的filtersideEffect来避免多次访问节点。

有关详细信息,请参阅Loop Pattern Page on the Gremlin Wiki