在匿名图 NEO4j 上使用 Dijkstra 最短路径

Using Djisktra Shortest Path on anonyous graph NEO4j

我一直在使用GDSL插件的Dijkstra Source-Target算法来获取两个节点之间的最短路径。这完全按照它应该的方式工作,但是我总是必须重新运行密码查询:

CALL gds.graph.create( 'graphname, 'node', 'rel', { relationshipProperties: 'prop' } )

否则 Djikstra 调用给出“数据库中不存在图形”。

有人知道为什么这种情况一直发生吗?或者我是否可以匿名 运行 djikstra algortihm?我在官方网站上搜索,但没有找到详细的示例。 谢谢。

可以在匿名图形投影中使用 运行 Dijkstra 算法,如此处所述 Dijkstra Source-Target Anonymous syntax

对于'graph does not exist'问题,您是否尝试过使用CALL gds.graph.list()来验证它是否已创建?您确定您没有在查询中的某处删除它吗?

当您重新启动 Neo4j 实例时,命名图将从内存中删除。这是您可以在不明确删除命名图的情况下删除它的唯一方法。如果你想按顺序执行多个 dijkstra 算法,如果你创建一个命名图,它的性能会更高,但你也可以 运行 匿名图上的 dijkstra:

CALL gds.graph.create( 'graphname, 'node', 'rel', { relationshipProperties: 'prop' } )

MATCH (source:Location {name: 'A'}), (target:Location {name: 'F'})
CALL gds.shortestPath.dijkstra.stream({
    nodeProjection: 'node',
    relationshipProjection:'rel',
    relationshipProperties: ['cost']
    sourceNode: source,
    targetNode: target,
    relationshipWeightProperty: 'cost'
})
YIELD index, sourceNode, targetNode, totalCost, nodeIds, costs, path