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

如何编写Neo4j Cypher查询并合并拥有至少2个公共节点的节点

Neo4j 公共邻接节点查询Cypher实现方案

场景1:查询两两共享至少2个公共节点的节点对

适用于仅存在ROW1、ROW2两个节点共享ID_B、ID_C两个公共节点的图谱场景:

// 匹配两个不同的Row节点,及二者共同关联的中间ID节点
MATCH (r1:Row)-[:REL]->(common_id:ID)<-[:REL]-(r2:Row)
WHERE id(r1) < id(r2)  // 避免重复返回r1-r2、r2-r1同一对
WITH r1, r2, collect(DISTINCT common_id) AS shared_ids
WHERE size(shared_ids) >= 2  // 筛选至少2个公共节点的配对
// 返回两个节点详情及公共节点列表
RETURN r1 AS row1_detail, r2 AS row2_detail, shared_ids AS common_nodes

注:请将代码中的:Row(行节点标签)、:REL(行节点与ID节点的关系类型)、:ID(公共ID节点标签)替换为你实际的图谱结构定义。

场景2:多节点连锁共享公共节点的合并查询

适用于存在Row1、Row2、Row3两两之间均满足至少2个公共节点的图谱场景,可合并返回所有关联的Row节点:

// 先匹配所有满足两两共享≥2公共节点的Row对
MATCH (r1:Row)-[:REL]->(common_id:ID)<-[:REL]-(r2:Row)
WHERE id(r1) < id(r2)
WITH r1, r2, collect(DISTINCT common_id) AS shared_ids
WHERE size(shared_ids) >= 2
// 收集所有关联的Row节点去重,同时收集所有配对的公共节点
WITH collect(DISTINCT r1) + collect(DISTINCT r2) AS all_row_list, collect({row_pair: [r1.name, r2.name], shared: shared_ids}) AS pair_shared_info
UNWIND all_row_list AS row
WITH DISTINCT row, pair_shared_info
// 合并返回所有相关Row详情及各配对的公共节点信息
RETURN collect(DISTINCT row) AS all_related_row_details, pair_shared_info AS all_pair_common_nodes

如果仅需要返回所有符合条件的Row节点的完整属性,将RETURN语句替换为RETURN collect(DISTINCT row{.*}) AS row_detail_list即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:05