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

Cypher窄搜索:获取指定组内节点关系及到领头节点的最短距离

解决方案

刚好碰到过类似的场景,给你写个精准的Cypher查询,完全满足你的需求:

// 1. 定位目标领头公司,同时确保它属于指定组
MATCH (leader:Company {companyId: $leaderId, groupId: $groupId})
// 2. 获取组内所有节点,并计算每个节点到领头公司的最短路径距离
MATCH (n:Company {groupId: $groupId})
OPTIONAL MATCH p = shortestPath((n)-[*]-(leader))
WITH leader, n, collect(DISTINCT n.companyId) AS allGroupCompanies, length(p) AS shortestDistance
// 3. 获取组内所有节点间的关系
MATCH (a:Company {groupId: $groupId})-[r]->(b:Company {groupId: $groupId})
WITH 
  collect(DISTINCT r) AS groupRelations, 
  collect(DISTINCT {companyId: n.companyId, shortestDistance: shortestDistance}) AS nodeDistanceMap
// 4. 返回最终结果
RETURN groupRelations, nodeDistanceMap

关键部分解释:

  • 参数化查询:用$groupId和$leaderId作为参数,避免注入风险,也方便复用。
  • 最短路径计算:用shortestPath函数计算无向路径(如果你的关系是有向的,可以把[*]改成[*]->或者<-[*],根据实际关系方向调整),length(p)就是最短距离——领头公司自己的距离会是0,因为路径长度为0。
  • 去重处理:用collect(DISTINCT ...)避免重复的关系或节点记录,毕竟每个节点只属于一个组,组内关系可能被双向匹配到(比如a->b和b<-a),去重后更干净。
  • 边界情况处理:OPTIONAL MATCH确保即使组内只有领头公司一个节点,也能正常返回(此时shortestDistance为0,groupRelations为空列表)。

如果你的关系类型是特定的(比如PART_OF、ASSOCIATED_WITH),可以把[r]改成[r:PART_OF]来缩小范围,提升查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:23:06