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搜索的不一定对,这是经过修改之后的。