在我的 Noe4j 数据库中,有了这个数据模型,我怎样才能得到最短路径?
In my Noe4j DB,With this data model , how can i get the shortest path?
我现在正在用 Neo4j 数据库做一个巴士路线项目,我在这里找到了解决方案(Nicole White 的回答):Neo4j Bus Route Application Modeling
.我认为这是个好主意,有了那个数据模型,我可以很容易地得到更少的中转路线。
但是,我想在两个公交车站之间添加 'walk route',如果它们彼此非常接近,这样用户就可以走很短的路去换乘。那我怎样才能得到更少的换乘路线呢?
以下是我目前尝试过的解决方案:
解决方案 1:
我在两个非常接近的站点之间创建了一个 'WALK_NEXT' 关系:
当我使用 'allShortestPaths' 函数时,我必须使用标签:STOP_AT,所以我无法获得包含 'WALK_NEXT' 关系 ship
的路径
match path=allShortestPaths((start:STATION {name:'S1'})-[rels:STOP_AT*]-(end:STATION {name:'S5'}))
return path
解决方案2:
我在两个非常接近的站点之间创建了一个 'WALK' 节点,并且 link 到具有 'STOP_AT' 关系的两个站点:
这样我可以获得包含'WALK'个节点的路径,但我认为这不是一个好方法,
对于 'allShortestPaths' 函数,我无法获取路径,只能获取包含此 'WALK' 节点的路径,
使用您为 "Solution 1" 描述的数据模型,您可以使用多种关系类型定义可变长度模式:(:Station)-[:STOP_AT|WALK_NEXT*]->(:Station)
。此模式将匹配 Station
节点之间关系类型为 :STOP_AT
或 :WALK_NEXT
的任何长度的路径。
因此您的查询变为:
MATCH
path=allShortestPaths((start:Station {name:'S1'})-[rels:STOP_AT|WALK_NEXT*]->(end:Station {name:'S5'}))
RETURN path
我现在正在用 Neo4j 数据库做一个巴士路线项目,我在这里找到了解决方案(Nicole White 的回答):Neo4j Bus Route Application Modeling .我认为这是个好主意,有了那个数据模型,我可以很容易地得到更少的中转路线。
但是,我想在两个公交车站之间添加 'walk route',如果它们彼此非常接近,这样用户就可以走很短的路去换乘。那我怎样才能得到更少的换乘路线呢?
以下是我目前尝试过的解决方案:
解决方案 1:
我在两个非常接近的站点之间创建了一个 'WALK_NEXT' 关系:
match path=allShortestPaths((start:STATION {name:'S1'})-[rels:STOP_AT*]-(end:STATION {name:'S5'}))
return path
解决方案2:
我在两个非常接近的站点之间创建了一个 'WALK' 节点,并且 link 到具有 'STOP_AT' 关系的两个站点:
这样我可以获得包含'WALK'个节点的路径,但我认为这不是一个好方法, 对于 'allShortestPaths' 函数,我无法获取路径,只能获取包含此 'WALK' 节点的路径,
使用您为 "Solution 1" 描述的数据模型,您可以使用多种关系类型定义可变长度模式:(:Station)-[:STOP_AT|WALK_NEXT*]->(:Station)
。此模式将匹配 Station
节点之间关系类型为 :STOP_AT
或 :WALK_NEXT
的任何长度的路径。
因此您的查询变为:
MATCH
path=allShortestPaths((start:Station {name:'S1'})-[rels:STOP_AT|WALK_NEXT*]->(end:Station {name:'S5'}))
RETURN path