JAVA获取ES连接并查询所有数据

我们的项目要获取es连接,新版本和旧版本有不小的区别,在8.17.0版本使用的是

复制代码
ElasticsearchClient
复制代码
<dependency>
    <groupId>co.elastic.clients</groupId>
    <artifactId>elasticsearch-java</artifactId>
    <version>8.17.0</version> <!-- 使用最新版本 -->
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

初始化代码

复制代码
File certFile = new File(caPath);
        SSLContext sslContext = TransportUtils.sslContextFromHttpCaCrt(certFile);
        BasicCredentialsProvider credsProv = new BasicCredentialsProvider();
        credsProv.setCredentials(
                AuthScope.ANY, new UsernamePasswordCredentials(esUserName, esPwd)
        );
        RestClient restClient = RestClient
                .builder(new HttpHost(esHost, esPort, esHttpType))
                .setHttpClientConfigCallback(hc -> hc
                        .setSSLContext(sslContext)
                        .setDefaultCredentialsProvider(credsProv)
                        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                )
                .build();
        ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
        ElasticsearchClient client = new ElasticsearchClient(transport);

循环获取代码

复制代码
SearchResponse<Object> searchResponse = client.search(searchRequest, Object.class);// 执行初始搜索
        List<Hit<Object>> hits = searchResponse.hits().hits();// 获取命中的文档列表

        String scrollId = searchResponse.scrollId();
        // 2. 循环获取所有结果
        boolean isEmpty = false;
        while (scrollId != null && !isEmpty) {
            String finalScrollId1 = scrollId;
            ScrollResponse<Object> scrollResponse = client.scroll(s -> s
                            .scrollId(finalScrollId1)
                            .scroll(Time.of(b -> b.time("30s")))
                    , Object.class);

            scrollId = scrollResponse.scrollId();
            List<Hit<Object>> scrollHits = scrollResponse.hits().hits();
            
        }

        // 最后清除 scroll 上下文
        String finalScrollId = scrollId;
        client.clearScroll(c -> c.scrollId(finalScrollId));
        client.close();
        writer.flush();
        writer.close();

重点关注循环获取数据的内容,通过AI搜索的不一定对,这是经过修改之后的。

相关推荐
李贺梖梖几秒前
DAY22 XML、XML解析
java
梵得儿SHI5 分钟前
Java 操作 XML 及动态生成报告:从解析到实战
xml·java·jaxb·dom4j·xml解析·操作xml·报告生成
Terio_my28 分钟前
Spring Boot 热部署配置与禁用
java·spring boot·后端
青云交1 小时前
Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶
java·深度学习·监控系统·行为识别·智能安防·智能检索·视频语义理解
!chen1 小时前
如何在新的Spring Boot项目中关闭Spring Security?
java·spring·jar
我是华为OD~HR~栗栗呀2 小时前
Java面经(22届考研-华oD)
java·后端·python·华为od·华为
z晨晨2 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务场景深度解析
java·spring boot·redis·微服务·kafka·spring security·电商
练习时长一年3 小时前
Bean后处理器
java·服务器·前端
野犬寒鸦3 小时前
从零起步学习Redis || 第五章:利用Redis构造分布式全局唯一ID
java·服务器·数据库·redis·分布式·后端·缓存
吹晚风吧3 小时前
SSE是什么?SSE解决什么问题?在什么场景使用SSE?
java·springboot·sse