0

在此处输入图像描述 我正在一家机构为 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
4

1 回答 1

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
于 2016-10-08T12:03:03.490 回答