Neo4j 如何获取最短路径密码查询?

Neo4j 如何获取最短路径密码查询?,neo4j,cypher,Neo4j,Cypher,我在这里用cypher语句创建了一个Neo4j数据库: 我想知道:如何获得: 1.更少的传输路径(按传输顺序) 2.最短路径(按路径长度排序) 3.最佳路径(较少转移和最短路径) 请给出相应的查询。 你认为这是建立公交查询系统的最好方法吗 非常感谢。最短路径非常简单: MATCH path=shortestPath((station_44:STATION {id:44})-[*0..10]-(station_46:STATION {id:46})) RETURN path 就计算转账而言,您可

我在这里用cypher语句创建了一个Neo4j数据库:

我想知道:如何获得: 1.更少的传输路径(按传输顺序) 2.最短路径(按路径长度排序) 3.最佳路径(较少转移和最短路径)

请给出相应的查询。 你认为这是建立公交查询系统的最好方法吗
非常感谢。

最短路径非常简单:

MATCH path=shortestPath((station_44:STATION {id:44})-[*0..10]-(station_46:STATION {id:46}))
RETURN path
就计算转账而言,您可以执行以下操作:

MATCH path=allShortestPaths((station_44:STATION {id:44})-[rels*0..10]-(station_46:STATION {id:46}))
RETURN length(path) AS stop_count, length(FILTER(index IN RANGE(1, length(rels)-1) WHERE (rels[index]).bus <> (rels[index - 1]).bus)) AS transfer_count
MATCH path=allshortestpath((station_44:station{id:44})-[rels*0..10](station_46:station{id:46}))
返回长度(路径)作为停止计数,长度(过滤器(范围(1,长度(rels)-1中的索引)其中(rels[index]).bus(rels[index-1]).bus)作为传输计数
一旦有了这两个变量,您就可以随心所欲地计算/排序。例如:

MATCH path=(station_44:STATION {id:44})-[rels*0..4]-(station_46:STATION {id:46})
WITH length(path) AS stop_count, length(FILTER(index IN RANGE(1, length(rels)-1) WHERE (rels[index]).bus <> (rels[index - 1]).bus)) AS transfer_count
RETURN stop_count, transfer_count
ORDER BY (stop_count * 0.5) + (transfer_count * 2.0) DESC
MATCH path=(station_44:station{id:44})-[rels*0..4](station_46:station{id:46})
长度(路径)作为停止计数,长度(过滤器(范围(1,长度(rels)-1中的索引)其中(rels[index]).bus(rels[index-1]).bus)作为传输计数
返回停止计数、转移计数
订货人(停止计数*0.5)+(转移计数*2.0)说明

在这里,我删除了
allshortestpath
调用,以便获得不同长度的路径。
ORDER BY
使用这两个度量的权重。不幸的是,至少在我的数据库中,如果路径长度超过四,它开始变得非常慢。如果需要,您可以通过在路径中引入方向箭头来改善这一点这在你的情况下是有意义的。

谢谢你的帮助。我知道最短路径非常简单。我想获得较少的传输路径和最佳路径。我还没有得到任何流程。我不确定我是否理解。长度/过滤器位应该计算出你路径的传输次数。我认为你的建议非常有用,我只是将其设置为o按“transfer_count”排序,然后我得到了我想要的。谢谢!很高兴听到这个消息!此外,我如何按关系属性获取路径顺序,例如按bus.name排序?