我注意到路径,长度和最高路径上的示例都在我的机器上显示与课程笔记/讲座中的结果不同。
我使用的是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
答案 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