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

问题描述:

我正在处理一个项目,我必须处理图表...... 我使用图形来获取两站之间的巴士和自行车的路线。获取两个节点之间的所有路由neo4j

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

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

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

感谢

编辑:

其实我改变我的图形,使其更容易。 所以我仍然有我所有的节点。现在,关系类型对应于从一个节点到另一个节点所需的时间。

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

感谢

+0

您是否需要使用Cypher?我可以想到一些将会打印出来的gremlin脚本,它应该非常整洁。 – Nicholas 2013-02-13 02:58:41

+0

事实上,我使用nodeJs ..我有一个图书馆来查询我的neo4j图,让我做一些密码查询...而不是gremlin查询... – 2013-02-13 14:03:50

在暗号,让没有关系的联系,并排序的重量总共两个节点之间的所有路径,您可以使用1.9推出了减少功能:

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个,如果你只需要最短的话。

+0

你是什么意思“获得两个节点之间没有通过关系链接的所有路径?”?如果不通过关系链接,节点之间如何形成路径? – 2016-12-08 21:08:59

+0

不是直接链接,我的意思是。 (还要注意,这是非常古老的......语法现在甚至不会运行)。请参阅3.0中的Apoc以获取更好的方法。 – 2016-12-09 20:26:07

可以使用的Dijkstra/Astar算法实现,这似乎是为你一个完美的结合。看看http://api.neo4j.org/1.8.1/org/neo4j/graphalgo/GraphAlgoFactory.html

不幸的是,你不能使用Cypher的。

+0

是的,我想过这样做..我只是想想知道是否有办法通过密码获得两个节点之间的所有路径,因为在获得所有可能的路径之后,我可以解析它们并获得最快的路径。并且使用密码来获取那些对我来说更容易, m使用neo4j和nodejs .. – 2013-02-11 15:33:05

+1

尽管首先获取两个节点之间的所有路径,然后过滤可能会慢得多,因为算法不能很聪明并立即选择最佳路径,即采取“快捷方式” – 2013-02-11 20:03:07

+6

We可能应该以某种方式将更多的这些算法暴露给密码。 – 2013-02-12 03:37:49