当前位置: 首页 > news >正文

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

相关文章:

  • 内容中台实施效能跃迁方法论
  • Python实现ONNXRuntime推理YOLOv11模型
  • AI 如何重塑数据湖的未来
  • git原理与常用命令及其使用
  • 数学建模:MATLAB卷积神经网络
  • 【嵌入式学习】触发器 - ADC - DAC
  • 微信 MMTLS 协议详解(五):加密实现
  • 【嵌入式硬件测试之道连载之第三章:核心处理器的选型与应用】
  • IS-IS原理与配置
  • Nexus L2 L3基本配置
  • 【Java SE】抽象类/方法、模板设计模式
  • 【递归,搜索与回溯算法篇】- 名词解释
  • 从X光片生成合成计算机断层扫描(CT)样成像的策略:一项范围审查|文献速递-医学影像人工智能进展
  • 【C++】sort函数的两种用法
  • 分布式容器技术是什么
  • 解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题
  • AGI成立的条件
  • 算法及数据结构系列 - 回溯算法
  • 嵌入式芯片与系统设计竞赛,值得参加吗?如何选题?需要学什么?怎么准备?
  • QT开发(4)--各种方式实现HelloWorld
  • 重庆大学:对学术不端行为“零容忍”,发现一例、查处一例
  • 国家主席习近平同普京总统出席签字和合作文本交换仪式
  • “20后”比“60后”更容易遭遇极端气候事件
  • 8小时《大师与玛格丽特》:长度可以是特点,但不是价值标准
  • 习近平同欧洲理事会主席科斯塔、欧盟委员会主席冯德莱恩就中欧建交50周年互致贺电
  • 美国警方:爱达荷州交通事故致7人死亡,8名伤者预计无生命危险