Solr如何同时获取分组文档与分组总数?Facet仅返回计数问题
Solr分组查询获取分组总数与分组内文档的解决方法
问题场景
在Solr中按字段分组查询时,需要同时获取分组总数(示例中的3)和每个分组内的文档,但默认分组返回的matches是未分组的总记录数,numFound是单分组内的文档数,无法直接拿到分组总数。
解决方法
方法1:直接读取返回结果中groups数组的长度
Solr分组返回的grouped.[字段名].groups是一个数组,其长度即为分组总数。比如你的示例中,grouped.memberId.groups的长度是3,就是你需要的分组总数。这种方式不需要修改查询参数,直接从返回结果中提取即可。
方法2:添加group.ngroups=true参数让Solr返回分组总数
在查询中添加group.ngroups=true参数,Solr会在分组结果里新增ngroups字段,直接返回准确的分组总数。
修改后的查询代码:
solrQuery.setParam("group", "true"); solrQuery.setParam("group.field", "memberId"); solrQuery.setParam("group.ngroups", "true");
返回结果结构会新增ngroups字段:
"grouped": { "memberId": { "matches": 14, "ngroups": 3, // 分组总数 "groups": [ { "groupValue": "179035", "doclist": { "numFound": 1, "start": 0, "docs": [{"memberId":179035}] } }, // ... 其他分组 ] } }
性能说明
group.ngroups=true会计算准确的分组总数,数据量大时可能有性能损耗。- 如果可以接受近似值,可使用
group.ngroups=approx,性能更优但结果可能存在误差。
补充说明
matches:符合查询条件的所有未分组文档总数(示例中的14)。numFound:单个分组内的文档数量(示例中每个分组的numFound=1)。
内容的提问来源于stack exchange,提问作者PT15
相关产品推荐
相关产品推荐

