如何为Neo4j Cypher模式理解添加SKIP/LIMIT控制返回数据量?
Cypher模式理解的结果数量控制方法
模式理解本身不支持直接添加SKIP/LIMIT语法,但可以通过两种方式实现结果数量的控制:
1. 集合切片语法
先让模式理解生成完整的结果集合,再通过切片操作截取指定范围的元素,效果等同于SKIP+LIMIT:
[(jobable)-[vg1:HAS_VOTE_ON]->(c1:Criterion)<-[:HAS_VOTE_ON]-(childD) | {criterion: c1, relationship: vg1} ][SKIP_NUM..SKIP_NUM+LIMIT_NUM] AS jobableWeightedCriterion
示例:要跳过前5条,取10条结果,写法为:
[(jobable)-[vg1:HAS_VOTE_ON]->(c1:Criterion)<-[:HAS_VOTE_ON]-(childD) | {criterion: c1, relationship: vg1} ][5..15] AS jobableWeightedCriterion
注意:这种方式会先生成全部结果再切片,适合结果集本身较小的场景。
2. 先匹配过滤再收集
如果数据量很大,更高效的方式是先用MATCH+SKIP/LIMIT筛选出目标数据,再用collect()构造需要的结构:
MATCH (jobable)-[vg1:HAS_VOTE_ON]->(c1:Criterion)<-[:HAS_VOTE_ON]-(childD) SKIP 5 LIMIT 10 WITH collect({criterion: c1, relationship: vg1}) AS jobableWeightedCriterion // 后续查询逻辑
这种方式提前过滤了数据,避免将全量结果加载到内存,性能更优。
内容的提问来源于stack exchange,提问作者alexanoid
相关产品推荐
相关产品推荐

