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

如何在Elasticsearch查询中同时获取匹配记录总数?

Elasticsearch查询同时获取指定条数结果与总匹配数

在你当前使用的elasticsearch-dsl库中,不需要额外发起查询,执行后的响应对象已经包含了所有匹配记录的总数,直接从响应里提取即可。

修改你的代码如下:

client = Elasticsearch(#conn_config)

s = Search(index=index_name).using(client)
outer_query = create_query(query_type='match', query=query)        
s = s.query(outer_query)
s = s[start_index:size]  # 指定返回的记录范围
response = s.execute()

# 获取总匹配记录数
# ES 7.x及以上版本,total是包含value和relation的对象,取value
total_matches = response.hits.total.value
# 若使用ES 6.x及更早版本,直接取response.hits.total即可

# 遍历返回的分页结果
for hit in response:
    print(hit)

def create_query(query_type, query): 
   return Q({query_type: {field_name: query}})  # 修正原代码中未使用入参query_type的问题

关键说明

  • 当你用s[start_index:size]做分页时,Elasticsearch会在返回指定范围数据的同时,计算所有匹配的总记录数并返回,不需要额外执行count查询。
  • 不同ES版本的total字段结构有差异:ES 7+返回的是带value和relation的对象,需取value;旧版本直接返回数字类型的total值。

内容的提问来源于stack exchange,提问作者devb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:32:05