2013-11-22 2 views
0

neo4j에서 새로운 기능이며 어떻게 라우팅 쿼리를 최적화 할 수 있는지 이해하려고합니다.경로 처리 중지

저는 OSM db로 작업하고 있습니다.

저는 한 지점에서 다른 지점까지의 거리를 계산하려고합니다.

START a=node(760119) 
MATCH path=(a)-[:NEXT|NODE*1..30]-(c) 
WHERE HAS(c.node_osm_id) AND c.node_osm_id=283103898 
RETURN DISTINCT reduce( 
    distance = 0, n in filter(
     x in path where has(x.length) 
    ) | distance + n.length 
) AS distance order by distance 

내 쿼리는 거리 집합을 반환합니다.

319.5609607071325 
320.0901127819706 
321.64043860878735 
332.13372820085 
334.21320610250484 

거리가 가장 짧은 것보다 길면 새 경로 찾는 것을 중단하려면 어떻게 쿼리를 다시 작성할 수 있습니까?

미리 감사드립니다.

+0

네오 버전? –

+0

버전 is2.0.0-m06 –

답변

0

Cypher는 아직 비용 평가를 통해 최단 경로를 지원하지 않습니다 (2.0-RC1 기준). 보다 효율적인 최단 경로 알고리즘을 사용해야하는 경우 관리되지 않는 확장을 구현해야합니다.

그러나 성능을 향상시킬 수있는 곳을 알 수 있습니다 ... C를 시작점 쿼리로 추가하려고 했습니까?

+0

dijkstra와 같은 임베디드 알고리즘은 어떻게됩니까? REST API를 통해 사용할 수 있습니다. 두 가지 유형의 관계 (내 경우에는 NODE와 NEXT)와 함께 사용할 수 있습니까? 그 중 하나만 무게를가집니다. –

+0

예, dijkstra를 사용합니다. 사용자 지정 관리되지 않는 확장 프로그램이 필요하다고 생각합니다. REST API에서 두 가지 관계 유형을 모두 지정하는 방법을 보지 마십시오. –