Neo4J(最短)路径出错

时间:2016-10-08 09:23:52

标签: neo4j path shortest

enter image description here 我正在为一所大学的NEO4J做课程。

我注意到路径,长度和最高路径上的示例都在我的机器上显示与课程笔记/讲座中的结果不同。

我使用的是3.0.6。有bug吗?我注意到它似乎无视边缘的方向。可能是我需要设置的一些设置吗?

提前致谢

LOAD

 CSV WITH HEADERS FROM "file:///C:/coursera/data/test.csv" AS line
   MERGE (n:MyNode {Name:line.Source})
   MERGE (m:MyNode {Name:line.Target})
   MERGE (n) -[:TO {dist:line.distance}]-> (m)

   match p=(a)-[:TO*]-(c)
   where a.Name='H' and c.Name='P'
   return p limit 1

1 个答案:

答案 0 :(得分:1)

您正在使用的查询:

match p=(a)-[:TO*]-(c)
where a.Name='H' and c.Name='P'
return p limit 1

匹配本身在使用该模式的两个给定节点之间找到一条可能的路径。它不能保证距离或顺序(我在我的路上运行它,它返回了一条相当复杂的路径,远离最短的距离)。如果课程笔记说这是一个最短的路径查询,那就错了。

在neo4j中,强制执行和保证最短路径的唯一方法是使用shortestPath()函数或allShortestPaths()。例如:

match p= shortestPath((a)-[:TO*]-(c))
where a.Name='H' and c.Name='P'
return p limit 1

修改

正如您所指出的,您使用的查询是无向的,因此它将遍历它找到的任何关系,无论找到路径的方向如何。在无向关系模式与有向关系模式上的匹配之间存在显着差异。您可以尝试使用定向关系运行查询,并查看差异。

match p= shortestPath((a)-[:TO*]->(c))
where a.Name='H' and c.Name='P'
return p limit 1