首页/数据/NoSQL 速查/_count 统计命中数量
Elasticsearch89 条

_count 统计命中数量

_count 只返回匹配文档数,不取 hits、不做聚合;配合查询条件可在批量操作前核对影响范围,比 search 更轻量。

NoSQL 速查数据更新于 2026-10-13

_count 做什么

_count 只返回匹配条件的文档数量,不返回 hits、也不做聚合,因此比 search 轻量得多。它最常用在批量操作之前核对影响范围,比如执行 delete_by_query 或 reindex 之前先确认这次到底会动到多少文档。

基本信息

接口GET /<index>/_count 或 POST,请求体只放 query
返回内容count 字段与 _shards 信息
不支持的参数from、size 与聚合都不适用,它只回答数量
简写形式GET /logs/_count?q=status:error 直接用查询串
权限要求索引读权限即可

典型使用场景

  • 批量删除或批量更新前核对影响范围
  • 数据质量巡检:统计缺字段、异常状态的文档数量
  • 写入校验:确认导入后文档数是否符合预期
  • 对比不同时间点的数量变化,判断数据增长趋势
  • 调试查询条件:先看命中数,再决定要不要返回正文

常用写法

常用写法
# 统计满足条件的文档数
GET /my-index/_count
{ "query": { "term": { "status": "open" } } }

# 用查询串语法快速统计
GET /logs/_count?q=status:error

# 批量删除前核对影响范围
GET /logs-2024/_count
{ "query": { "range": { "@timestamp": { "lt": "now-90d" } } } }

# 不带条件即统计整个索引的文档数
GET /my-index/_count

返回字段读法

字段含义注意
count匹配到的文档总数随刷新节奏变化,写入高峰两次结果可能不同
_shards.total参与查询的分片数与索引分片数一致说明查询正常
_shards.successful成功返回的分片数小于 total 说明存在不可用分片
_shards.failed失败分片数非 0 时结果可能不完整
_count 的数字来自各分片的统计,非常轻量,但会随刷新节奏变化:写入高峰期短时间内两次调用可能得到不同结果,把它当成强一致快照会误判。
执行 delete_by_query、update_by_query 或 reindex 之前先用 _count 核对数量,是最省事的防误操作习惯;数量与预期差一个量级时,多半是查询条件写错了。
无条件统计超大索引的文档数仍要访问所有分片,高频调用会持续消耗资源;监控采集要控制频率,别把核对手段变成新的压力来源。

易错点

  • 把 _count 的结果当作强一致快照:写入正在进行时结果会变化,对账需要稳定口径时应在停写或刷新后再统计
  • _count 不支持分页与聚合,需要累加值或分组结构时必须改用 search 配合 aggs
  • 无条件统计超大索引仍要访问所有分片,高频调用会持续消耗资源,采集频率需要控制
  • 只看 count 不看 _shards.failed,分片查询失败时结果偏小却不易察觉,重要核对要同时检查分片信息

数据来源与参考

  • Elasticsearch Guide: Count API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌