Neo4j 使用cypher,如何在数据库中获得较少的传输路径?

Neo4j 使用cypher,如何在数据库中获得较少的传输路径?,neo4j,cypher,Neo4j,Cypher,我用neo4j创建了一个公交线路数据库,你可以在这里下载 我希望得到较少的传输路径,我的做法如下: MATCH path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'})) RETURN NODES(path) AS stations,relationships(path) AS path, length(FILTER(

我用neo4j创建了一个公交线路数据库,你可以在这里下载

我希望得到较少的传输路径,我的做法如下:

MATCH path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
         RETURN NODES(path) AS stations,relationships(path) AS path,
         length(FILTER(index IN RANGE(1, length(rels)-1) WHERE (rels[index]).bus <> (rels[index - 1]).bus)) AS transfer_count
         ORDER BY transfer_count
         LIMIT 10
MATCH path=allshortestpath((开始:潍坊_电台{名称:'寒亭一村'})-[rels*.50]->(结束:潍坊_电台{名称:'火车站'}))
将节点(路径)返回为站点,将关系(路径)返回为路径,
长度(筛选器(范围(1,长度(rels)-1)中的索引,其中(rels[index]).bus(rels[index-1]).bus))作为传输计数
按转账数量订购
限制10

但是结果不正确,谁能帮我呢?

这能满足您的需求吗:

MATCH path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
     RETURN NODES(path) AS stations,relationships(path) AS route,
     length(path) AS transfer_count
     ORDER BY transfer_count ASC
     LIMIT 10
这将返回10条路径,连接按路径长度排序的两个站点。不过,此处不需要排序。因为我们使用的是
allshortestpath
函数,所以找到的所有路径的长度都相同(对于共享的数据,22)

您在问题中提到了转移时间,但我不认为时间是您数据中的属性。如果您存储了时间,您可以使用
reduce
函数将旅行时间和顺序相加

编辑

使用
extract
函数从路径中的关系中收集总线名称:

MATCH 
    path=allShortestPaths((start:潍坊_STATION {name:'寒亭一村'})-[rels*..50]->(end:潍坊_STATION {name:'火车站'}))
RETURN 
    NODES(path) AS stations, relationships(path) AS route,
    length(path) AS transfer_count, extract(x in rels | x.bus) AS buses
    ORDER BY transfer_count ASC
    LIMIT 10

您的结果是什么?您希望从您的查询中得到什么?我希望在两个车站之间少获得10条换乘路线,并在换乘时间前完成结果订单否,先生,任何关系都有一个属性“bus”,这是总线名称,我想在pathEdited答案中获得不同的总线名称,在pathEdited答案中也返回总线名称我想我需要更改数据模型,如:,然后我可以以简单的方式获得较少的传输路由