在我的Noe4j DB中,使用此数据模型,我如何获得最短路径?

时间:2015-12-11 01:48:07

标签: neo4j cypher shortest-path

我正在使用Neo4j数据库做一个Bus Route项目,我在这里找到了解决方案(Nicole White的回答):Neo4j Bus Route Application Modeling 我认为这是一个好主意,通过这种数据模型,我可以非常简单地获得较少的转移路线。

但是,我想在两个公交车站之间添加“步行路线”,如果它们彼此非常接近,那么用户可以通过简短的方式进行转移。那么我怎样才能获得较少的转移路线?

以下解决方案是我迄今为止所尝试的:

解决方案1:

我在两个彼此非常接近的站点之间创建一个'WALK_NEXT'关系: enter image description here 当我使用'allShortestPaths'函数时,我必须使用label:STOP_AT,所以我无法获得包含'WALK_NEXT'关系的路径

match path=allShortestPaths((start:STATION {name:'S1'})-[rels:STOP_AT*]-(end:STATION {name:'S5'}))    
return path

溶液2:

我在两个彼此非常接近的站点之间创建一个“WALK”节点,并链接到两个具有“STOP_AT”关系的站点: enter image description here

这样我就可以获得包含'WALK'节点的路径,但我认为这不是一个好方法,  对于'allShortestPaths'函数,我无法获取路径,只能获取包含此'WALK'节点的路径,

1 个答案:

答案 0 :(得分:0)

使用您为“解决方案1”描述的数据模型,您可以使用多种关系类型定义可变长度模式:(:Station)-[:STOP_AT|WALK_NEXT*]->(:Station)。此模式将匹配:STOP_AT节点之间关系类型为:WALK_NEXTStation的任意长度的路径。

所以你的查询变为:

MATCH 
    path=allShortestPaths((start:Station {name:'S1'})-[rels:STOP_AT|WALK_NEXT*]->(end:Station {name:'S5'}))    
RETURN path