如何在单个SOLR查询中获取两类各10条匹配指定字段值的文档?
SOLR单查询实现分类型固定条数结果返回
需求
从SOLR集合中返回总计20条文档,要求其中10条匹配vehicle_type字段的car值,另外10条匹配该字段的truck值,需通过单个SOLR查询完成。
常规查询的问题
常规查询写法如下:
http://myhost/mycollection? fq=is_deleted:false AND vehicle_type:(car OR truck) &q=vehicle_name:(*blue* *driver*) &fl=vehicle_name,vehicle_type &count=20 &start=0 &sort=score desc
这种写法存在问题:受排序优先级或文档数量影响,可能返回的20条全是car类型文档,完全没有truck类型,无法满足每类最多10条的要求。
SQL中可以通过两个子查询各取10条不同类型结果,再用UNION合并,但SOLR中需要借助分组功能实现。
解决方案
使用SOLR的分组功能,通过group.field指定分组字段,配合group.main参数让结果以扁平集返回,具体查询参数如下:
http://myhost/mycollection? fq=is_deleted:false AND vehicle_type:(car OR truck) &q=vehicle_name:(*blue* *driver*) &fl=vehicle_name,vehicle_type &count=20 &start=0 &sort=score desc &group=true &group.field=vehicle_type &group.limit=10 &group.main=true &group.sort=score desc
关键参数说明:
group=true:开启分组功能group.field=vehicle_type:按vehicle_type字段分组group.limit=10:每组最多返回10条结果group.main=true:将分组后的结果作为主结果集返回(扁平结构,而非嵌套分组格式)group.sort=score desc:每组内按得分降序排序
参考文档
- SOLR官方结果分组指南
- SOLR官方字段折叠快速入门文档
内容的提问来源于stack exchange,提问作者5DimentionalObject
相关产品推荐
相关产品推荐

