java查询es超过10000条数据

背景:需要每天零点导出es中日志数据到数据库中给数据分析人员做清洗,然后展示给业务人员。但在es中默认一次最多只能查询10000条数据。
在这里我就只贴一下关键代码

SearchRequest searchRequest = new SearchRequest("索引名");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //时间字段
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("logdate")
                .from("2025-03-20 00:00") // 设置开始时间
                .to("2025-03-20 23:00")         // 设置结束时间
                .format("yyyy-MM-dd HH:mm")    //设置时间格式
                .includeLower(true)            // 包含起始时间点
                .includeUpper(false);          // 不包含结束时间点
searchSourceBuilder.query(rangeQuery);
searchSourceBuilder.size(1000); //每批次大小
SortBuilder sortBuilder = SortBuilders.fieldSort("logDate").order(SortOrder.ASC);
searchSourceBuilder.sort(sortBuilder);        searchSourceBuilder.sort(SortBuilders.fieldSort("_id").order(SortOrder.ASC));
Object[] searchAfter = null;
do {
       if (searchAfter != null){
             searchSourceBuilder.searchAfter(searchAfter);
        }
       searchRequest.source(searchSourceBuilder);
       SearchResponse search = null;
       try {
            search = client.search(searchRequest, RequestOptions.DEFAULT);
       } catch (IOException e) {
            throw new RuntimeException(e);
       }
        SearchHit[] hits = search.getHits().getHits();
         if (hits.length==0){
              break;
          }
        for (SearchHit hit : hits) {
                System.out.println(hit.getSourceAsString());
         }
            //获取最后一个文档的排序值
            searchAfter = hits[hits.length-1].getSortValues();
        }while (searchAfter != null);
        System.out.println("总共查询到 "+i+" 条数据");
    }

上面这段代码的本质就是用的分页查询
所用es相关依赖为

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
            <version>2.5.14</version>
        </dependency>

es客户端为RestHighLevelClient

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐