获取两个节点neo4j之间的所有路由

时间:2013-02-11 14:30:45

标签: neo4j cypher

我正在开展一个项目,我必须处理图表...... 我正在使用图表通过公共汽车和自行车在两站之间获得路线。

事实上,我所有的关系都包含从关系的起点到结束所需的时间。

为了获得节点之间的最短路径,我使用了密码的最短路径函数。但有些事情,最短的路径并不是最快的......

有没有办法让两个节点之间的所有路径都没有通过关系链接?

由于

编辑:

事实上,我更改了我的图表,以便更轻松。 所以我仍然有我的所有节点。现在,关系类型对应于从节点到另一个节点所需的时间。

cypher的shortestPath函数给出了包含较少关系的路径。我希望它返回所有Type(时间)的加法最小的路径。 这可能吗?

由于

2 个答案:

答案 0 :(得分:11)

在cypher中,要获得两个节点之间没有按关系链接的所有路径,并按权重中的总数排序,可以使用1.9中引入的reduce函数:

start a=node(...), b=node(...) // get your start nodes
match p=a-[r*2..5]->b // match paths (best to provide maximum lengths to prevent queries from running away)
where not(a-->b) // where a is not directly connected to b
with p, relationships(p) as rcoll // just for readability, alias rcoll
return p, reduce(totalTime=0, x in rcoll: totalTime + x.time) as totalTime
order by totalTime

如果只需要最短的时间,你可以在最后抛出限制1。

答案 1 :(得分:4)

您可以使用Dijkstra / Astar算法,这似乎非常适合您。看看http://api.neo4j.org/1.8.1/org/neo4j/graphalgo/GraphAlgoFactory.html

不幸的是你不能使用Cypher的那些。