You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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字段统计总文档数
          }
        }
      }
    }
  }
}

结果提取

执行上述查询后,从返回结果中提取两个核心数值:

  1. 过滤后文档数:从hits.total.value字段获取
  2. 索引总文档数:从aggregations.total_document.count.value字段获取

如果需要严格贴合期望的JSON格式,可在应用层对这两个值进行组装。


内容的提问来源于stack exchange,提问作者Gol. D Roger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:51:48