我正在使用Neo4j数据库做一个Bus Route项目,我在这里找到了解决方案(Nicole White的回答):Neo4j Bus Route Application Modeling 我认为这是一个好主意,通过这种数据模型,我可以非常简单地获得较少的转移路线。
但是,我想在两个公交车站之间添加“步行路线”,如果它们彼此非常接近,那么用户可以通过简短的方式进行转移。那么我怎样才能获得较少的转移路线?
以下解决方案是我迄今为止所尝试的:
解决方案1:
我在两个彼此非常接近的站点之间创建一个'WALK_NEXT'关系: 当我使用'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”关系的站点:
这样我就可以获得包含'WALK'节点的路径,但我认为这不是一个好方法, 对于'allShortestPaths'函数,我无法获取路径,只能获取包含此'WALK'节点的路径,
答案 0 :(得分:0)
使用您为“解决方案1”描述的数据模型,您可以使用多种关系类型定义可变长度模式:(:Station)-[:STOP_AT|WALK_NEXT*]->(:Station)
。此模式将匹配:STOP_AT
节点之间关系类型为:WALK_NEXT
或Station
的任意长度的路径。
所以你的查询变为:
MATCH
path=allShortestPaths((start:Station {name:'S1'})-[rels:STOP_AT|WALK_NEXT*]->(end:Station {name:'S5'}))
RETURN path