2016-07-24 2 views
0

도시에서 전송할 테스트 데이터베이스를 만들고 있습니다. 내 목표는 모든 정류장 사이에서 경로를 찾습니다. 나는이 그래프를 생성 :Neo4J 쿼리에 경로가 표시되지 않습니다.

match p=shortestPath((a)-[:TO*]-(c)) 
where a.Id=131 and c.Id=268 
return p, length(p) limit 1 

또는이 쿼리 : 그것은 어떤 경로를 표시하지 않습니다이다

MATCH (p1:Tram {id: 131}), (p2:Tram {id: 263133}), 
     path = shortestpath((p1)-[:NEXT*]-(p2)) 
RETURN path 

create (Stop_13_1:Tram {Id: 131}), 
(Stop_13_2:Tram {Id: 132}), 
(Stop_26_1:Tram {Id: 261}), 
(Stop_26_2:Tram {Id: 262}), 
(Stop_26_3_13_3:Tram {Id: 263133}), 
(Stop_26_4_13_4:Tram {Id: 264134}), 
(Stop_26_5_13_5:Tram {Id: 265135}), 
(Stop_26_6_13_6:Tram {Id: 266136}), 
(Stop_26_7_13_7:Tram {Id: 267137}), 
(Stop_26_8:Tram {Id: 268}), 
(Stop_7_1:Trollebus {Id: 71}), 
(Stop_7_2:Trollebus {Id: 72}), 
(Stop_7_3:Trollebus {Id: 73}), 
(Stop_7_4:Trollebus {Id: 74}), 
(Stop_7_5:Trollebus {Id: 75}); 

나는 짧은 방법을 찾아보십시오

. 검색어 수정을 도와 주시겠습니까?

P. 그러나 그래프는 관계의 유형 NEXT 것을 보여준다,

MATCH (Stop_13_1 {Id: 131}), 
    (Stop_13_2 {Id: 132}), 
    (Stop_26_1 {Id: 261}), 
    (Stop_26_2 {Id: 262}), 
    (Stop_26_3_13_3 {Id: 263133}), 
    (Stop_26_4_13_4 {Id: 264134}), 
    (Stop_26_5_13_5 {Id: 265135}), 
    (Stop_26_6_13_6 {Id: 266136}), 
    (Stop_26_7_13_7 {Id: 267137}), 
    (Stop_26_8 {Id: 268}), 
    (Stop_7_1 {Id: 71}), 
    (Stop_7_2 {Id: 72}), 
    (Stop_7_3 {Id: 73}), 
    (Stop_7_4 {Id: 74}), 
    (Stop_7_5 {Id: 75}) 
    MERGE   (Stop_13_1)- [:NEXT{distance:4.7,route:13,transport:'tram',direct:'down'}]->(Stop_13_2) 
    MERGE   (Stop_13_2)-[:NEXT{distance:4.7,route:13,transport:'tram',direct:'up'}]->(Stop_13_1) 
    MERGE   (Stop_13_2)-[:NEXT{distance:3.7,route:13,transport:'tram',direct:'down'}]->(Stop_26_3_13_3) 
    MERGE   (Stop_26_3_13_3)-[:NEXT{distance:3.7,route:13,transport:'tram',direct:'up'}]->(Stop_13_2) 
    MERGE   (Stop_26_1)-[:NEXT{distance:5.8,route:26,transport:'tram',direct:'down'}]->(Stop_26_2) 
    MERGE   (Stop_26_2)-[:NEXT{distance:5.8,route:26,transport:'tram',direct:'up'}]->(Stop_26_1) 
    MERGE   (Stop_26_2)-[:NEXT{distance:2.5,route:26,transport:'tram',direct:'down'}]->(Stop_26_3_13_3) 
    MERGE   (Stop_26_3_13_3)-[:NEXT{distance:2.5,route:26,transport:'tram',direct:'up'}]->(Stop_26_2) 
    MERGE   (Stop_26_3_13_3)-[:NEXT{distance:3.1,route:26,route:13,transport:'tram',direct:'down'}]->(Stop_26_4_13_4) 
    MERGE   (Stop_26_4_13_4)-[:NEXT{distance:3.1,route:26,route:13,transport:'tram',direct:'up'}]->(Stop_26_3_13_3) 
    MERGE   (Stop_26_4_13_4)-[:NEXT{distance:5.8,route:26,route:13,transport:'tram',direct:'down'}]->(Stop_26_5_13_5) 
    MERGE   (Stop_26_5_13_5)-[:NEXT{distance:5.8,route:26,route:13,transport:'tram',direct:'up'}]->(Stop_26_4_13_4) 
    MERGE   (Stop_26_5_13_5)-[:NEXT{distance:10.8,route:26,route:13,transport:'tram',direct:'down'}]->(Stop_26_6_13_6) 
    MERGE   (Stop_26_6_13_6)-[:NEXT{distance:10.8,route:26,route:13,transport:'tram',direct:'up'}]->(Stop_26_5_13_5) 
    MERGE   (Stop_26_6_13_6)-[:NEXT{distance:2.5,route:26,route:13,transport:'tram',direct:'down'}]->(Stop_26_7_13_7) 
    MERGE   (Stop_26_7_13_7)-[:NEXT{distance:2.5,route:26,route:13,transport:'tram',direct:'up'}]->(Stop_26_6_13_6) 
    MERGE   (Stop_26_5_13_5)-[:NEXT{distance:0.6,transport:'walking',direct:'down'}]->(Stop_7_2) 
    MERGE   (Stop_7_2)-[:NEXT{distance:0.6,transport:'walking',direct:'up'}]->(Stop_26_5_13_5) 
    MERGE   (Stop_26_8)-[:NEXT{distance:1,route:26,transport:'tram',direct:'down'}]->(Stop_26_7_13_7) 
    MERGE   (Stop_26_7_13_7)-[:NEXT{distance:1,route:26,transport:'tram',direct:'up'}]->(Stop_26_8) 
    MERGE   (Stop_7_1)-[:NEXT{distance:2.2,route:7,transport:'trolleybus',direct:'down'}]->(Stop_7_2) 
    MERGE   (Stop_7_2)-[:NEXT{distance:2.2,route:7,transport:'trolleybus',direct:'up'}]->(Stop_7_1) 
    MERGE   (Stop_7_2)-[:NEXT{distance:1.6,route:7,transport:'trolleybus',direct:'up'}]->(Stop_7_3) 
    MERGE   (Stop_7_3)-[:NEXT{distance:2.5,route:7,transport:'trolleybus',direct:'up'}]->(Stop_7_4) 
    MERGE   (Stop_7_4)-[:NEXT{distance:3.1,route:7,transport:'trolleybus',direct:'down'}]->(Stop_7_5) 
    MERGE   (Stop_7_5)-[:NEXT{distance:4.4,route:7,transport:'trolleybus',direct:'down'}]->(Stop_7_2) 
+0

우리는 r 노드를 만들었지 만 관계를 만들지는 모르겠다. 귀하의 설명에 그것을 추가 할 수 있습니까? 또한 생성을 중단하여 각 요소를 자체 줄에 만들 수 있습니까? 가로로 스크롤해야 읽기가 어려워집니다. – InverseFalcon

+0

Christophe의 답은 맞습니다.하지만 다음 단계에서는 APOC 절차 플러그인을 추가하는 것이 좋습니다.이 플러그인을 사용하면 NEXT 관계의 거리 속성을 고려한 가중치가 가장 짧은 경로를 사용할 수 있습니다. https://github.com/neo4j-contrib/neo4j-apoc-procedures#graph-algorithms-work-in-progress – InverseFalcon

답변

2

당신은 TO 관계가 가장 짧은 경로를 일치 시키려면 : 나는 관계를 추가 잊어 버렸습니다.

내가 여기 그래프 http://console.neo4j.org/r/boin78

복제 그리고 다음 쿼리는 바로 올바른 관계 유형을 지정하여 예상대로 작동 : 두 번째 쿼리의

match p=shortestPath((a)-[:NEXT*]-(c)) 
where a.Id=131 and c.Id=268 
return p, length(p) 
limit 1 

을, 당신은 동안 속성으로 id을 사용하여 노드가 Id 속성 이름을 가지고 있다면 다음이 작동합니다.

MATCH (p1:Tram {Id: 131}), (p2:Tram {Id: 263133}), 
path = shortestpath((p1)-[:NEXT*]-(p2)) 
RETURN path 
관련 문제