2017-07-03 5 views
2

J'ai essayé d'utiliser neo4j et sa bibliothèque de processus apoc pour obtenir le chemin le plus court entre 2 nœuds.
Par exemple, je crée 2 noeuds comme ci-dessousApoc Dijkstra traversant dans les deux sens tout en calculant le plus court chemin

CREATE (:Point {title:'A'}) 
CREATE (:Point {title:'B'}) 

Je leur relation établis tels

MATCH (u1:Point {title:'A'}), (u2:Point {title: 'B'}) 
CREATE (u1)-[:distance {value:10}]->(u2) 

Maintenant, je l'ai établi une relation dirigée de A à B et non vice versa. Alors quand je l'appelle APOC Dijkstra comme ci-dessous

MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'}) 
CALL apoc.algo.dijkstra(start, end, 'distance', 'value') YIELD path, weight 
RETURN path, weight 

Je ne suis pas censé obtenir aucun résultat leur est pas de chemin dirigé de B à A. Mais je reçois le même résultat que lorsque je lance la requête à l'aide un chemin de A à B.

Quelqu'un peut-il me dire pourquoi? Pourquoi Dijkstra ignore-t-elle la direction? Toute aide serait très appréciée.

Répondre

2

Vous devez ajouter un > ou < au type de relation dans votre requête.

MATCH (start:Point {title: 'B'}), (end:Point {title: 'B'}) 
CALL apoc.algo.dijkstra(start, end, 'distance>', 'value') YIELD path, weight 
RETURN path, weight 
+1

Merci beaucoup. Je ne sais pas si c'est parce que je n'ai pas d'expérience avec Neo4j mais je n'ai pas trouvé de tels détails dans la documentation de l'apoc. – MrRo