如何在Solr分组结果(取分类最新项)上应用Facet查询?
问题:Solr分组后结合Facet筛选并保留分类最新文档
现有Solr文档
itemA -name: apple -cate: fruit -createdate: 2023-02-28T00:24:00Z -color: red itemB -name: pear -cate: fruit -createdate: 2023-01-20T00:24:00Z -color: yellow itemC -name: potato -cate: vegitable -createdate: 2023-02-20T00:24:00Z -color: yellow
当前查询逻辑及结果
当前已实现按cate字段分组,按createdate降序排序,每组返回1条最新文档,查询语句如下:
?q=*%3A*&start=0&rows=10&facet=true&facet.field=color&group=true&group.field=cate&group.limit=1&group.sort=createddate desc&group.ngroups=true&group.truncate=true&group.facet=true&group.format=grouped
返回结果:
itemA -name: apple -cate: fruit -createdate: 2023-02-28T00:24:00Z -color: red itemC -name: potato -cate: vegitable -createdate: 2023-02-20T00:24:00Z -color: yellow facets: color: red: 1 yellow: 1
需求
用户在UI中点击color=red的筛选条件后,需保留各cate分类最新文档的逻辑,同时仅返回符合color=red的文档。
解决方案
通过添加Solr的过滤查询参数fq实现需求,调整后的完整查询语句如下:
?q=*%3A*&start=0&rows=10&facet=true&facet.field=color&group=true&group.field=cate&group.limit=1&group.sort=createddate desc&group.ngroups=true&group.truncate=true&group.facet=true&group.format=grouped&fq=color:red
关键调整说明
- 添加过滤条件:用
fq=color:red过滤出所有color为red的文档,该参数会在分组逻辑执行前先筛选数据集,且支持缓存,性能更优 - 保留原有分组逻辑:所有分组相关参数保持不变,确保在筛选后的数据集里,依然按
cate分组并取每组最新的1条文档 - 维持Facet统计准确性:
group.truncate=true和group.facet=true参数确保Facet统计基于分组后的结果,而非原始筛选数据集
预期返回结果
itemA -name: apple -cate: fruit -createdate: 2023-02-28T00:24:00Z -color: red facets: color: red: 1
扩展说明
如果需要多条件组合筛选,可在fq中用逻辑运算符拼接,例如:
fq=(color:red OR color:green) AND cate:fruit
内容的提问来源于stack exchange,提问作者Peng
相关产品推荐
相关产品推荐

