我用neo4j创建了一个总线路线数据库,您可以在这里下载它,https://www.dropbox.com/s/zamkyh2aaw3voe6/data.rar?dl=0
我想得到更少的转移路径,我做的是:
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但结果不对,谁能帮我?
发布于 2015-12-04 18:18:41
这是否给了你你想要的:
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条路径。不过,这里的订单是不需要的。由于我们使用的是allShortestPaths函数,所以找到的所有路径都将是相同的长度(对于您共享的数据,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 10https://stackoverflow.com/questions/34080069
复制相似问题