(最短)路径中的 Neo4J 错误

Neo4J Error in (shortest) paths

我正在一个机构做 NEO4J 的 coursera 课程。

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

我正在使用 3.0.6。有错误吗?我注意到它似乎忽略了边缘的方向。会不会是我需要设置的一些设置?

提前致谢

加载

 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

您正在使用的查询:

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

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

在 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