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

Elasticsearch默认返回10条记录,无Scroll API如何获取全部数据?

如何在不使用Scroll API的情况下单次获取Elasticsearch所有记录

首先得明确Elasticsearch的一个核心性能限制:它默认有个max_result_window参数,默认值是10000。这是ES为了避免单次查询返回过多数据导致内存过载而设置的阈值——也就是说,不管你把size参数设得多大,单次查询最多只能返回10000条结果,除非你修改这个参数(但不推荐随意调大,会显著影响集群性能)。

基于这个前提,分两种场景处理:

  • 如果你的数据总量≤10000条:
    直接在查询里把size设为一个足够大的数值(比如10000),就能一次性拿到所有记录。就算你预先不知道总条数也没关系,ES会自动返回实际存在的所有数据,不会返回空结果填充。示例DSL如下:

    GET /your_index_name/_search
    {
      "size": 10000,
      "query": {
        "match_all": {}
      }
    }
    
  • 如果你的数据总量>10000条:
    这种情况下单次查询无法获取所有记录(强制修改max_result_window的话,会让ES在计算排序、聚合和返回结果时消耗大量内存,甚至引发OOM,风险极高)。如果不能用Scroll API,更推荐用search_after API(它是Scroll的轻量替代方案,基于上一页的最后一条记录的排序值来分页),但这已经不属于单次查询的范畴了。

另外补充个小技巧:如果想先确认数据总条数再设置size,可以先执行一次极简查询,从返回结果的hits.total.value字段里拿到总条数,再决定size的取值——这需要两次查询,但对数据量不大的场景来说很实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:49