我们的项目要获取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搜索的不一定对,这是经过修改之后的。