Solr 9中替代group结合collapse的方案咨询(无Sub-Query/不影响性能)
Solr 9 替代 Group + Collapse 原逻辑的等效实现方案
核心需求回顾
原Solr 7.1逻辑:按query_type字段分组,每组内对xyz_id执行去重(保留唯一值,nullPolicy: expand即保留null值文档),同时维持原有排序顺序,要求迁移到Solr 9后无性能损耗、不使用子查询。
等效实现方案
Solr 9中group.collapse用法已被弃用,可通过**collapse 参数结合 perGroup=true**实现完全等效的逻辑,具体请求参数配置如下:
q=你的查询条件 &group=true &group.field=query_type &collapse=xyz_id &collapse.nullPolicy=expand &collapse.perGroup=true &sort=你的原有排序规则 # 例如:create_time desc, score asc # 保留原请求中的其他参数(如group.limit、rows等)
方案说明
collapse.perGroup=true:核心参数,指定Solr在每个query_type分组内部执行xyz_id的去重操作,完全对应原group.collapse的行为,而非全局去重。collapse.nullPolicy=expand:与原参数逻辑一致,保留xyz_id为null的文档,不进行合并。- 保留原排序规则:确保分组内的文档排序顺序与原逻辑完全一致,保证去重后保留的文档和原结果一致。
- 无性能损耗:所有逻辑在单次请求中完成,无需子查询,Solr底层处理效率与原方案相当,适配主从架构。
迁移注意事项
- 移除原请求中的
group.collapse=xyz_id和group.collapse.nullPolicy=expand参数,避免冲突。 - 若原请求包含
group.limit、rows等分页/限制参数,直接保留即可,Solr会先在分组内完成去重,再应用限制规则。 - 测试验证:迁移后对比原Solr 7.1与Solr 9的返回结果,确认分组数、每组内的唯一
xyz_id数量及排序完全一致。
内容的提问来源于stack exchange,提问作者Akshit Sarin
相关产品推荐
相关产品推荐

