如何在Elasticsearch中同时获取索引总文档数与过滤后文档数?
问题:同时获取Elasticsearch索引总文档数与过滤后文档数
我在Elasticsearch中存储了用户详情文档,现有过滤查询可返回country为IN的记录及对应数量,但需要一次查询同时返回索引总文档数和过滤后的文档数,期望结果格式如下:
{ "total_document": 500, "filtered_document": 50 }
解决方案
使用Elasticsearch的**全局聚合(Global Aggregation)**结合过滤查询即可实现,全局聚合不受当前查询过滤条件影响,能统计索引内所有文档的数量。具体查询如下:
GET v1_users_index/_search { "size": 0, // 关闭具体文档返回,仅保留统计结果 "query": { "bool": { "must": [ { "match": { "country.keyword": "IN" } } ] } }, "aggs": { "total_document": { "global": {}, // 全局聚合范围覆盖整个索引 "aggs": { "count": { "value_count": { "field": "_id" // 通过唯一的_id字段统计总文档数 } } } } } }
结果提取
执行上述查询后,从返回结果中提取两个核心数值:
- 过滤后文档数:从
hits.total.value字段获取 - 索引总文档数:从
aggregations.total_document.count.value字段获取
如果需要严格贴合期望的JSON格式,可在应用层对这两个值进行组装。
内容的提问来源于stack exchange,提问作者Gol. D Roger
相关产品推荐
相关产品推荐

