2011-09-25 2 views
1

gremlin 스크립트와 neo4j를 사용하여 두 노드 사이의 모든 경로를 찾아 최대 10 레벨까지 내림차순으로 찾으려고합니다.두 노드 사이의 모든 경로를 찾으십시오.

x = g.v(2) 
y = g.v(6) 

x.both.loop(10){!it.object.equals(y)}.paths 

내가 문서를 보였지만,이 유스 케이스에 관련된 아무것도 찾을 수 couldnt한다 :하지만이 REST API의 응답으로 얻을 모든 스크립트 여기

java.lang.ArrayIndexOutOfBoundsException: -1 

이다.

+0

y가 정의되지 않았습니까? – nawroth

+0

@nawroth 하, 잘 잡으십시오 ... 코드 샘플에서 고정되었지만 정의 된 y를 사용하더라도 작동하지 않는 것 같습니다. – Max

답변

1

Gremlin에서의 인수는 loop이고 원하는 단계로 돌아가는 횟수이며 루프가 중단 될시기를 결정하기 위해 클로저가 계산됩니다. 이 경우에는 loop(10)이 있으므로 파이프 라인이 정의되지 않은 지점으로 너무 멀리 되돌아갑니다. 클로저에 관해서는 객체가 문제의 객체인지 아닌지를 확인해야합니다.이 경우 중지해야하며 10 개의 루프를 이미 완료했는지 여부도 확인해야합니다.

당신이 정말로 그것을이 같은 것을 원하는 것은 :

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

그러나, 나는 그래프의주기가있는 경우,이 기꺼이 반복주기를 통과하고 너무 많은 초래할 것이라는 점을 추가해야합니다을 경로.과 sideEffect을 영리하게 적용하여 여러 번 노드를 방문하지 않도록 할 수 있습니다.

자세한 내용은 Loop Pattern Page on the Gremlin Wiki을 참조하십시오.

관련 문제