You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求构建Neo4j Cypher查询:查找同Line_ID的Station间路线

解决方案

针对你的需求,下面是修正后的Cypher查询,能确保全程使用同一Line_ID且避免循环:

基础查询(无长度限制)

MATCH path = (start:Station {id:1})-[rels:Line*]->(end:Station {id:25})
// 强制所有路径中的Line关系使用同一个Line_ID
WHERE ALL(rel IN rels WHERE rel.Line_ID = rels[0].Line_ID)
// 排除包含重复节点的路径,防止循环
AND NONE(node IN nodes(path) WHERE size([n IN nodes(path) WHERE n = node]) > 1)
RETURN 
  path,
  rels[0].Line_ID AS line_id,
  length(path) AS station_count
ORDER BY station_count ASC

优化性能的查询(限制路径长度)

如果你的线路站点数有限,建议限制路径的最大关系数,避免无意义的长路径查询,提升效率:

MATCH path = (start:Station {id:1})-[rels:Line*1..10]->(end:Station {id:25})
WHERE ALL(rel IN rels WHERE rel.Line_ID = rels[0].Line_ID)
AND NONE(node IN nodes(path) WHERE size([n IN nodes(path) WHERE n = node]) > 1)
RETURN 
  path,
  rels[0].Line_ID AS line_id,
  length(path) AS station_count
ORDER BY station_count ASC

注:*1..10代表路径最少经过1个站点(1段线路),最多经过10个站点(10段线路),可根据实际场景调整数值。

更直观的结果展示

如果需要直接查看路径中的站点ID列表,可使用以下查询:

MATCH path = (start:Station {id:1})-[rels:Line*1..10]->(end:Station {id:25})
WHERE ALL(rel IN rels WHERE rel.Line_ID = rels[0].Line_ID)
AND NONE(node IN nodes(path) WHERE size([n IN nodes(path) WHERE n = node]) > 1)
RETURN 
  [node IN nodes(path) | node.id] AS station_ids,
  rels[0].Line_ID AS line_id,
  length(path) AS station_count
ORDER BY station_count ASC

关键逻辑说明

  • ALL(rel IN rels WHERE rel.Line_ID = rels[0].Line_ID):确保路径中所有Line关系的Line_ID与第一个关系的Line_ID一致,彻底避免换线。
  • NONE(node IN nodes(path) WHERE size([n IN nodes(path) WHERE n = node]) > 1):检查路径中的所有节点,确保没有重复节点,从根源上防止循环。

内容的提问来源于stack exchange,提问作者Ondra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:47:17