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


所有评论(0)