2014-12-22 1 views
2

내 PHP 응용 프로그램에서 neo4j의 나머지 API를 사용하고 있습니다. 내 요구 사항은 한 노드에서 관련된 가장 가까운 노드를 찾고 "2"라고 말하면 노드는 "road_to"관계를 사용하여 관련을 찾습니다.Traverse path cypher query

레벨 1의 한 위치에서 가장 가까운 위치를 찾은 다음 두 위치 등을 찾습니다. 모든 위치는 경로 "road_to"를 사용하여 연결됩니다.

나는 내가 필요가없는 그것은 반복 노드를 제공 사이퍼 찾는 쿼리하지만

1)가 있습니다.

2) 노드에서 표시해야하는 범위를 제한해야합니다. 여기에서 쿼리에 몇 가지 제한을 주어야하는() - [: road_to] ->()를 반복해서 주어야합니다. 수준

start n=node(2) Match (n)-[r:road_to]->()-[:road_to]->()-[:road_to]->(foaf) return r,foaf,n 

.Thanx

그래서

답변

1

다중 홉을 축소하는 가장 간단한 방법과 같이 제한된 가변 길이 경로를 사용하는 것입니다 주시면 감사하겠습니다 어떤 도움 :

MATCH (n)-[:road_to*1..3]-(foaf) 
WHERE id(n)=2 
RETURN n, foaf; 

공지 사항이 I 절을 MATCH으로 대체하여 WHERE id(n)=2으로 처리했습니다. 그들은 기본적으로 동일합니다. 여기서 연산자 [:road_to*1..3]:road_to 관계의 1 - 3 홉 사이에서 일치합니다. 당신이 거기에 좋아하는 한계를두고 "가변적 인 관계"하위 절에서이 접근 방법에 대해 더 많이 읽어보십시오. here.

당신은 몇 가지 기준을 충족 짧은 링크를 찾으려면, 당신은 이런 그 작업을 수행 할 수 있습니다

다음
MATCH (n), (foaf), 
    p = shortestPath((n)-[:road_to*..15]-(foaf)) 
WHERE id(n) = 2 AND foaf.someProperty=someValue 
RETURN p 

우리가 p의 경로를 바인딩, 그래서있어 당신은 내부의 각각의 관계를 원하는 경우 그 경로의 다른 cypher 기능으로 그들을 얻을 수 있습니다. 또한 내가 특정 foaf을 찾고 있음을 알 수 있습니다. 일반적으로 최단 경로를 찾는 경우 특정 노드에 대한 경로를 찾고 있습니다. :road_to으로 연결된 많은 노드가있는 경우이 추가 조건없이 한 번 홉을 얻을 수 있습니다.

shortestPath에 대한 자세한 내용 can be found here.

+0

고맙습니다. 답장을 보내 주려고 시도했습니다. 문제는이 노드가 결과로 반복되는 노드입니다. –