2016-06-10 13 views
0

Ich versuche, die ShortestPath-Funktion in Neo4j zu verwenden.Neo4j KürzestePfad reduzieren Funktion Null zurückgeben

Die Route würde durch verschiedene Knoten mit einem LinkLength-Wert verlaufen. Der Wert im "reduce" -Teil sollte für die kürzeste LinkLength zwischen 2 Nodes minimiert werden.

Frage: Neo4j könnte eine Route als die kürzeste Pfadlösung finden. Überraschenderweise sagt Neo4j, dass der Wert der Reduzierungsfunktion null ist. Was ist der Fehler?

MATCH p = (n1:Node)-[:Connects*]->(n2:Node) 
WHERE n1.myid = 'M32 J3' AND n2.myid = 'M32 J1' 
RETURN p AS shortestPath, 
reduce(distance=0.0, n in nodes(p) | case n.LinkLength when NOT NULL then 
distance+toFloat(n.LinkLength) end) 
LIMIT 1; 

Antwort

0

Ihre case Anweisung hat keinen anderen Teil. Nicht 100% sicher, aber ich denke, in diesem Fall werden Sie null für den Akku-Wert zurückgeben - null + 1 == null.

Der richtige Weg, das takle ist durch ersten Knoten mit Nullwerten Ausfiltern und gelten reduce danach:

MATCH p = (n1:Node)-[:Connects*]->(n2:Node) 
WHERE n1.myid = 'M32 J3' AND n2.myid = 'M32 J1' 
RETURN p AS shortestPath, 
reduce(distance=0.0, n in [x in nodes(p) WHERE n.LinkLength IS NOT NULL] | 
    distance+toFloat(n.LinkLength)) 
LIMIT 1; 

Weiteres ich denke, man im Grunde einen kürzesten gewichtete Pfad berechnet werden soll. Ihre Aussage erhält nur das Gewicht des ersten gefundenen Pfades. Um gewichtete kürzeste Wege zu machen, werfen Sie einen Blick auf https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_graph_algorithms_work_in_progress. (bedenke: apoc benötigt Neo4j> = 3.0).

+0

Danke Stefan. Kann Apoc auf Windows-Rechner verwendet werden? Vielen Dank. –

+0

In einem Windows 10-Rechner habe ich die ausführbare JAR-Datei apoc-1.0.0.jar heruntergeladen und die Datei in den Ordner plugins gestellt. Dann habe ich den Befehl ausgeführt: CALL apoc.help ("apoc"), aber ein Fehler Maschine erschien wie folgt: "Es gibt keine Prozedur mit dem Namen' apoc.help' registriert für diese Datenbank-Instanz. Bitte stellen Sie sicher, dass Sie hat den Prozedurnamen korrekt geschrieben und die Prozedur ordnungsgemäß implementiert. " –