首页 > 编程语言 >java小工具封装-给定es客户端和SearchSourceBuilder和es索引名直接用scroll方式查询出所有数据封装至List<Map<String, Object>>返回进行自定义数据处理

java小工具封装-给定es客户端和SearchSourceBuilder和es索引名直接用scroll方式查询出所有数据封装至List<Map<String, Object>>返回进行自定义数据处理

时间:2024-11-27 10:32:33浏览次数:12  
标签:hit scrollId 自定义 searchRequest 封装 查询 esClient scroll es

封装类:传参1 esClient 传参2 自定义searchSourceBuilder 传参3 索引名(可直接复制粘贴使用)

public static List<Map<String, Object>> getEsResultData(RestHighLevelClient esClient, SearchSourceBuilder searchSourceBuilder, String index_name) throws IOException {

        // 1、创建searchRequest
        SearchRequest searchRequest = new SearchRequest(index_name);
        // 2、指定scroll信息
        searchRequest.scroll(TimeValue.timeValueMinutes(5L));

        // 开始查询数据
        searchRequest.source(searchSourceBuilder);

        //4、获取返回结果scrollId,source
        SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT); //通过发送初始搜索请求来初始化搜索上下文
        String scrollId = searchResponse.getScrollId();
        SearchHit[] searchHits = searchResponse.getHits().getHits();
        List<Map<String, Object>> result = new ArrayList<>();
        for (SearchHit hit : searchHits) {
            result.add(hit.getSourceAsMap());
        }
        // 查询出来之后我们要获取他的id
        // 然后利用他的id去查询他的下一页
        while (searchHits.length > 0) {
            //5、循环  -  创建 SearchScrollRequest  创建一个新的搜索滚动请求,保存最后返回的滚动标识符和滚动间隔
            // 获取 scrollId 去查询下一页
            SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
            //6、指定scrollId的生存时间
            scrollRequest.scroll(TimeValue.timeValueMinutes(1L));
            //7、执行查询获取返回结果
            SearchResponse scrollResp = esClient.scroll(scrollRequest, RequestOptions.DEFAULT);
            //8、判断是否查询到了数据,输出
            SearchHit[] hits = scrollResp.getHits().getHits();
            //循环输出下一页
            if (hits != null && hits.length > 0) {
                for (SearchHit hit : hits) {
                    result.add(hit.getSourceAsMap());
                }
            } else {
                //9、判断没有查询到数据,退出循环
                break;
            }
        }

        //查完之后我们把存进缓存的id给删除  完成滚动后,清除滚动上下文
        //10、创建ClearScrollRequest
        ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
        //11、指定scrollId
        clearScrollRequest.addScrollId(scrollId);
        //12、删除scrollId
        esClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);

        return result;
    }

标签:hit,scrollId,自定义,searchRequest,封装,查询,esClient,scroll,es
From: https://blog.csdn.net/m0_64393858/article/details/144064294

相关文章

  • python中urllib库和requests库的选择
    python中urllib和requests是两个最常用的库。它们都能够发送HTTP请求,但在使用方式、功能和效率上存在一些差异。一、urllib库urllib是Python标准库中的一个模块,用于发送HTTP请求。它提供了一个简单的接口来发送GET、POST等请求,并获取响应。urllib提供了一些基本的HTTP请求方......
  • java小工具封装- java 查询mysql/pg库 sql中所有属性和属性值
     封装类:传参数据库连接和查询的sql就可以打印出查询sql的所有属性和属性值(可直接复制粘贴使用)publicstaticvoidselectAll(Connectionconnection,Stringsql){ResultSetMetaDatarsmd=null;try{//trycatch判断是否有异常Statemen......
  • java小工具封装 - 给定连接执行指定路径的sql文件
    封装类-传参数据库连接connection和sql文件的绝对路径(可直接复制粘贴使用)publicstaticvoidexecuteSqlFile(Stringpath,Connectionconnection){//读取文件BufferedReaderreader;Statementpst=null;try{pst=......
  • Weights & Biases使用教程
    一、W&B简介        W&B是"Weights&Biases"的缩写,它是一个AI开发者平台,其官方链接在此,提供用于训练模型、微调模型以及利用基础模型的工具。W&B由三个主要组件构成:Models、Weave和Core。W&BModels:这是一组轻量级、可互操作的工具,供机器学习实践者用于训练和微调......
  • ERP、SCM、SRM、WMS、MES、QMS、OMS全上,真的有必要吗?
    声明:不存在任何踩一捧一的意思,来自于网络上大家讨论度比较高的一个话题,某些专门盯着我们挑刺的朋友可以出门右转了。另外这篇内容也会尽量客观的去探讨这个问题,也欢迎大家补充指正哦!首先,开门见山给出我个人的看法:没有必要。就拿我所了解的一些企业来说吧,上了这么多系统后,员工......
  • OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核
    本文主要介绍如何使用Python和OpenCV库通过卷积操作来应用不同的图像滤波效果。主要分为几个步骤:图像的读取与处理、自定义卷积函数的实现、不同卷积核的应用,以及结果的展示。卷积在图像处理中,卷积是一种重要的操作,它通过将图像与一个小的矩阵(称为卷积核或滤波器)进行运算......
  • SpringBoot源码-spring boot启动时配置properties和yml文件解析过程以及spring.profil
    1.当我们启动一个SpringBoot项目的时候,入口程序就是main方法,而在main方法中就执行了一个run方法。@SpringBootApplicationpublicclassStartApp{ publicstaticvoidmain(String[]args){ //test SpringApplication.run(StartApp.class); }} publicstati......
  • 你有用过HTML5的requestAnimationFrame吗?它运用的场景有哪些呢?
    是的,我了解HTML5的requestAnimationFrameAPI。它主要用于创建流畅的网页动画和视觉效果。与setTimeout或setInterval相比,requestAnimationFrame有几个关键优势,使其成为执行动画的首选方法:requestAnimationFrame的优势:浏览器优化:requestAnimationFrame由浏览器优......
  • AntDesign - Vue Table组件 实现动态表格、列宽计算(方式二)
    朋友们,按照上文(方式一)思路,实现了动态表格和表头分组,这篇按照方式一的需求,扩展出另一种代码写法;一、表格头表格columns还是定义在data(){}中,初始化静态列数组,配置项列由后端接口返回(第二点写动态配置项代码);在方式一基础上加了筛选菜单功能,因此变化代码部分如下......
  • ReactPress部署指南:为技术小白量身定制
    近期,阮一峰在科技爱好者周刊第325期中推荐了一款开源工具——ReactPress,ReactPress一个基于Next.js的博客和CMS系统,可查看demo站点。(@fecommunity投稿)ReactPress是一个开源的发布平台,它基于React构建,用户可以在支持React和MySQL数据库的服务器上设置自己的博客和......