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

如何修改Neo4j Cypher查询,过滤匹配结果中入度>1的r节点?

Question

我当前执行的Neo4j Cypher查询为:

MATCH (n:ARTICLE { article_id: '1234' })-[k:CONNECTS]->(r:ARTICLE) 
RETURN n,k,r;

现需对查询结果进行过滤,筛选出其中入度(即指向r的CONNECTS关系的度数)大于1的r节点,请问应如何操作?(我认为此问题与“如何在Neo4j中使用MATCH过滤时获取节点度数”存在差异,因此决定单独提问。)

Answer

刚好最近也处理过类似的需求,给你两种实用的解决方案:

方案一:直接计算入度并过滤

这种方式最直观,在原查询的基础上,用SIZE()函数计算r节点的入度,再通过WHERE子句筛选符合条件的记录:

MATCH (n:ARTICLE { article_id: '1234' })-[k:CONNECTS]->(r:ARTICLE)
// 计算r节点的入度:所有指向r的CONNECTS关系数量
WITH n, k, r, SIZE((:ARTICLE)-[:CONNECTS]->r) AS in_degree
WHERE in_degree > 1
RETURN n, k, r

这里的SIZE((:ARTICLE)-[:CONNECTS]->r)会统计所有类型为ARTICLE的节点通过CONNECTS关系指向r的数量,也就是r的入度,之后只保留入度大于1的结果即可。

方案二:先筛选高入度节点再关联路径

如果你的数据库中ARTICLE节点数量很大,而入度大于1的节点占比很小,这种方式可能性能更优:

// 第一步:先找出所有入度大于1的ARTICLE节点
MATCH ()-[:CONNECTS]->(r:ARTICLE)
WITH r, COUNT(*) AS in_degree
WHERE in_degree > 1
// 第二步:再匹配这些节点和目标节点n的连接关系
MATCH (n:ARTICLE { article_id: '1234' })-[k:CONNECTS]->(r)
RETURN n, k, r

这种方式先缩小范围,只保留符合入度要求的r节点,再去匹配和n的关联路径,避免对大量不符合条件的节点进行计算。

你可以根据自己的数据规模和查询性能需求选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:01:00