使用neo4j(使用APOC 5.7),我试图在拓扑图上找到最短路径(节点上没有位置),其中每个步骤的权重默认为1。我不想限制路径的步骤数,只想限制关系类型。
文档非常扁平:
apoc.algo.dijkstra
需要重视关系
apoc.algo.dijkstraWithDefaultWeight
投掷:There is no procedure with the name apoc.algo.dijkstraWithDefaultWeight
apoc.algo.aStar
和 apoc.algo.aStarWithPoint
需要点位置或 lat
和 long
apoc.algo.allSimplePaths
需要maxNodes
并且是全图搜索...
例如,对于图表:
CREATE (b:City {name:'Berlin'})
CREATE (m:City {name:'München'})
CREATE (f:City {name:'Frankfurt'})
CREATE (h:City {name:'Hamburg'})
MERGE (b)-[:DIRECT]-(h)
MERGE (b)-[:DIRECT]-(m)
MERGE (b)-[:DIRECT]-(f)
MERGE (f)-[:DIRECT]-(m)
MERGE (f)-[:DIRECT]-(h)
我想要得到类似的东西:
╒════════╤══════════════════════════════════════════════════════════════════════╕
│weight │path │
╞════════╪══════════════════════════════════════════════════════════════════════╡
│2.0 │(:City {name: "München"})<-[:DIRECT]-(:City {name: "Frankfurt"})- |
│ │[:DIRECT]->(:City {name: "Hamburg"}) │
└────────┴──────────────────────────────────────────────────────────────────────┘
目前,我看到的最简单的选择是使用
apoc.algo.dijkstra
并在每个关系上添加一个值为 weight
的 1
属性 - 这是荒谬的。
有什么建议吗?
如果你不关心重量,你可能根本不需要使用 APOC,而是使用内置的 Cypher ShortestPath 函数:
MATCH path=shortestPath((:City {name: 'München'})-[d:DIRECT*]-(:City {name: 'Hamburg'})) RETURN size(d) AS weight, path