2016-07-24 3 views
0

Ich erstelle Testdatenbank für den Transport in einer Stadt. Mein Ziel Weg zwischen allen Haltestellen finden. ich diese Grafik erstellt:Neo4J Abfrage zeigt nicht Pfad

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}); 

Als ich kurzen Weg versuchen zu finden:

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

Oder diese Anfrage:

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

Es ist zeigt keine Route. Können Sie mir bitte helfen, Abfrage zu bearbeiten?

P.S. Ich habe vergessen, Beziehung hinzufügen:

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

Sie haben uns die Erstellung von Ihnen gezeigt r Knoten, aber ich sehe keine Beziehungen. Kannst du das zu deiner Beschreibung hinzufügen? Können Sie die Erstellung unterbrechen, sodass jedes Element in einer eigenen Zeile erstellt wird? Wenn man horizontal scrollen muss, ist es schwer zu lesen. – InverseFalcon

+0

Christophe's Antwort ist die richtige, aber für den nächsten Schritt würde ich empfehlen, das APOC Procedures-Plugin hinzuzufügen, mit dem Sie einen gewichteten kürzesten Pfad verwenden können, der die Distanzeigenschaften in Ihren: NEXT-Beziehungen berücksichtigt. https://github.com/neo4j-contrib/neo4j-apoc-procedures#graph-algorithms-work-in-progress – InverseFalcon

Antwort

2

Sie versuchen kürzesten Wege zu entsprechen, die eine TO Beziehung haben, aber Ihre Grafik zeigt, dass die Art der Beziehung NEXT ist.

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

Für die zweite Abfrage, verwendet man die id als Eigentum während:

ich Ihr Diagramm hier http://console.neo4j.org/r/boin78

Und die folgende Abfrage wie erwartet funktioniert nur durch die Angabe der korrekten Beziehungstyp repliziert Knoten haben die Id Eigenschaft Name, die folgenden funktioniert:

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