Neo4j 中加权有向图的最短路径

问题描述 投票:0回答:1

我使用 OpenStreetMap 和 OpenAddresses 数据在 Neo4j 中创建了城市地图。我想找到从一个地址到另一个地址的最短路径。问题是,当我使用函数 apoc.algo.aStarConfig 时,我得到了一条路径,而没有考虑关系的方向。

MATCH (a:Address)-[:NEAREST_INTERSECTION]->(source:Intersection)
WHERE a.full_address CONTAINS "410 E 5TH AVE SAN MATEO, CA"
MATCH (poi:Address)-[:NEAREST_INTERSECTION]->(dest:Intersection) 
WHERE poi.full_address CONTAINS "39 GRAND BLVD SAN MATEO, CA"
CALL apoc.algo.aStarConfig(source, dest, "ROAD_SEGMENT", 
  {pointPropName: "location", weight: "length"}) 
YIELD weight, path
RETURN *

Result of the query

所以我的问题是是否有可能找到从一条路径到另一条路径的最短路径而不考虑上游关系?

neo4j cypher graph-databases shortest-path neo4j-apoc
1个回答
0
投票

如果您只想查找关系处于一个方向的路径,例如出站,您可以在入站关系类型前面添加

<
,或者为出站附加
>

仅关注出站

ROAD_SEGMENT
关系,您的查询将变为:

MATCH (a:Address)-[:NEAREST_INTERSECTION]->(source:Intersection)
WHERE a.full_address CONTAINS "410 E 5TH AVE SAN MATEO, CA"
MATCH (poi:Address)-[:NEAREST_INTERSECTION]->(dest:Intersection) 
WHERE poi.full_address CONTAINS "39 GRAND BLVD SAN MATEO, CA"
CALL apoc.algo.aStarConfig(source, dest, "ROAD_SEGMENT>", 
  {pointPropName: "location", weight: "length"}) 
YIELD weight, path
RETURN *
© www.soinside.com 2019 - 2024. All rights reserved.