2012-10-05 5 views
0

neo4j에서 트립을 관계로 유지하고 각 관계에 시작 시간과 종료 시간이있는 그래프가 있고 node1에서 node2까지 유효한 경로를 찾아야한다고 가정 해 봅시다. relationship1.arrivetime < relationship2.departime의 제약 조건을 준수하는이 경로를 찾아야합니다.Cypher 유효한 트립을 얻으십시오

MATCH 절 내에이 기능을 포함 할 수있는 방법이 있습니까? 아니면 WHERE 절을 사용하여 찾을 수있는 기존 경로를 파일링해야합니까?

답변

1

peter가 말한 것처럼 속성을 검사하려면 where 절을 사용해야합니다. 일치 패턴은 속성을 검사하지 않고 패턴 일치를위한 것입니다. 그러나 인덱스를 사용하여 특정 시간 범위에 맞게 시작할 노드를 찾을 수 있습니다 (예 :).

나는 당신을 위해 예를 구축 : http://console.neo4j.org/r/6ropic 모든 음의 시간 차이가있을 필요가 :

create 
(_1 {city:"DC"}), 
(_2 {city:"NY"}), 
(_3 {city:"SF"}), 
(_4 {city:"LA"}), 
_1-[:flight {leave:1349431200, arrive:1349445600}]->_2, 
_1-[:flight {leave:1349427600, arrive:1349442000}]->_2, 
_1-[:flight {leave:1349424000, arrive:1349438400}]->_2, 
_1-[:flight {leave:1349420400, arrive:1349434800}]->_2, 
_1-[:flight {leave:1349416800, arrive:1349431200}]->_2, 
_1-[:flight {leave:1349409600, arrive:1349424000}]->_2, 
_2-[:flight {leave:1349431200, arrive:1349445600}]->_3, 
_2-[:flight {leave:1349427600, arrive:1349442000}]->_3, 
_2-[:flight {leave:1349424000, arrive:1349438400}]->_3, 
_3-[:flight {leave:1349431200, arrive:1349445600}]->_4, 
_3-[:flight {leave:1349427600, arrive:1349442000}]->_4, 
_3-[:flight {leave:1349424000, arrive:1349438400}]->_4, 
_3-[:flight {leave:1349438400, arrive:1349445600}]->_4, 
_3-[:flight {leave:1349442000, arrive:1349449200}]->_4, 
_3-[:flight {leave:1349445600, arrive:1349452800}]->_4; 

그냥 재미를 위해, 여기 (필터링 전) 대상을 일치하는 모든 항공편을 표시하는 쿼리 유효한 여행이되기 위해 건너 뜁니다. 여기

where 절 필터링 쿼리의 :

start dc=node(1), la=node(4) 
match trip=dc-[dcny]->ny-[nysf]->sf-[sfla]->la 
where dcny.arrive < nysf.leave and nysf.arrive < sfla.leave 
return dcny.arrive - nysf.leave, nysf.arrive - sfla.leave, dcny.arrive, nysf.leave, nysf.arrive, sfla.leave; 
+-----------------------------------------------------------------------------------------------------------+ 
| dcny.arrive - nysf.leave | nysf.arrive - sfla.leave | dcny.arrive | nysf.leave | nysf.arrive | sfla.leave | 
+-----------------------------------------------------------------------------------------------------------+ 
| -3600.0     | -3600.0     | 1349424000 | 1349427600 | 1349442000 | 1349445600 | 
+-----------------------------------------------------------------------------------------------------------+ 
1 row 
0 ms 

http://console.neo4j.org/r/79qr9s

그것은 당신이 가변 길이 경로와 함께 할하려고 시도하는 경우 조금 복잡합니다,하지만 사용 사례에 대한 아마 아니다 기껏해야 몇 차례의 도중 체류를 명기해야합니다.

업데이트 :

이것에 대해 좀 더 생각 - 당신은 또한 도착하고 떠날 시간에 대한 인덱스를 기반으로, 당신의 start 절에서 관계의 그룹을 선택할 수 있습니다. 검색을 많이 제한 할 수 있습니다.

관련 문제