2014-01-15 2 views
0

첨부 된 이미지에서 쿼리 최단 경로, 예제의 경우와 같은 노드가 두 번 이상 나오는 일치 패턴을 무시하는 방법. TO C는 준다의 enter image description hereNeo4j - 동일한 노드가 두 번 이상있는 패턴을 무시하는 방법

최단 경로

start a=node:node_auto_index(point='A'),c=node:node_auto_index(point='c') match p=a-[r:CONNECTS*]->c return p; 

1. A-> C 
2. A -> B -> C -> A -> C 
3. A -> B -> C 
4. A -> C -> A -> C 
5. A -> B -> A -> C 
6. A -> C -> B -> A -> B -> C 

더 9 패턴 않지만 일부 패턴 동일한 노드 또는 시작 및 종료 노드는 무관 출력 같을 것이다 번 이상 나타나있다 그래서 어떻게 그 경로에 노드가 두 번 이상있는 패턴을 식별하고 무시할 수 있습니까?

+0

:-) 예상대로 어느 Neo4j 버전을 사용하고 있습니까? – jjaderberg

+0

@jjaderberg 버전 1.9.5 – Jeevanantham

답변

1

최단 경로를 사용하지 않았습니다. 올바른 쿼리는 다음과 같습니다

start a=node:node_auto_index(point='A'), 
     c=node:node_auto_index(point='c') 
match p=shortestPath((a)-[r:CONNECTS*]->(c)) 
return p; 

또는에만 유효한 경로를 결과

START a=node:node_auto_index(point='a'), 
c=node:node_auto_index(point='c') 
MATCH path= a-[r:CONNECTS*]->c 
WHERE ALL(n in nodes(path) where 1=length(filter(m in nodes(path) : m=n))) 
RETURN path; 

지금은 위의 경우에 대한 해결책을 발견 allShortestPaths

+0

위의 경우 모두'shortestpath'와'allshortestpaths'는 직접 연결 A -> C를 리턴하지만, ** A -> B -> C **와 ** 가능한 모든 유효한 연결이 필요합니다 ** A -> C ** – Jeevanantham

관련 문제