能否在Solr全量结果而非过滤后结果上应用分面并保留原始统计?
Solr 分面统计保留全量文档结果方案
问题场景
假设存在以下Solr文档:
{"id": 1, "title": "shirt", "brand": "adidas"}, {"id": 2, "title": "shirt2", "brand": "adidas"}, {"id": 3, "title": "shirt", "brand": "nike"}, {"id": 4, "title": "shirt", "brand": "puma"}
- 直接使用
facet.field=brand分面时,结果为:{"adidas": 2, "nike": 1, "puma": 1} - 添加
brand:adidas过滤器后,分面结果变为:{"adidas": 2, "nike": 0, "puma": 0}
需求:无论应用何种查询过滤器,分面统计始终基于过滤前的全量文档,保持原始分面结果。
解决方案
完全可行,只需在查询中添加facet.global=true参数即可。
具体查询示例
构造包含全局分面参数的查询:
q=brand:adidas&facet=true&facet.field=brand&facet.global=true
该参数会让Solr忽略当前查询的过滤条件,基于整个索引的全量文档计算分面统计,最终返回的结果就是全量文档的品牌统计:
{"adidas": 2, "nike": 1, "puma": 1}
进阶用法
- 若仅需对特定分面字段启用全局统计,可使用字段级参数:
f.brand.facet.global=true,其他分面字段仍会遵循查询过滤器的限制。 - 配合
facet.mincount=0可保留所有分面项(包括计数为0的),但启用facet.global=true后,所有分面项的计数均为全量真实值,不会出现0的情况。
内容的提问来源于stack exchange,提问作者Aizaz
相关产品推荐
相关产品推荐

