繁体   English   中英

替换 ElasticSearch java api 客户端中的 searchForStream 方法

[英]Replacement for searchForStream method in ElasticSearch java api client

我正在根据 Spring Boot 3 的要求将 Java 应用程序从弹性搜索高级客户端迁移到 Java API 客户端,因为它不再支持“org.springframework.data.elasticsearch.client.erhlc.ElasticsearchRestTemplate”...

我无法找到一种使用流进行搜索的新方法。 这是一个旧的代码片段......

NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder() //
    .withQuery(q) //
    .withPageable(PageRequest.of(0, 1000)); //

NativeSearchQuery searchQuery = builder.build();

Stream<X> list = elasticsearchTemplate.searchForStream(searchQuery, X.class).stream();

我正在使用 Spring Boot 3、Elastic Search 8.5.3 和 Java Api 8.5.3...

这是gradle依赖...

implementation group: 'co.elastic.clients', name: 'elasticsearch-java', version: "8.5.3"

我花了一段时间才找到,因为我在官方文档中找不到它,但是替换为 deprecated

'org.springframework.data.elasticsearch.client.erhlc.ElasticsearchRestTemplate'

'org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchTemplate'

关于“searchForStream”,现在可以将搜索转换为流...

您还需要将更新的依赖项包含到 gradle/maven 中......

api group: 'org.springframework.data', name: 'spring-data-elasticsearch', version: "5.0.0"

ElasticsearchOperations.searchForStream(Query query, Class<T> clazz)在 Spring Data Elasticsearch 5.0 中可用,就像在 4.4 中一样。 这根本没有改变。 发生变化的是 Spring Data Elasticsearch 现在使用 Elasticsearch 的新客户端。

发生变化的是您不能使用NativeSearchQueryBuilder ,因为这是为旧客户端创建本机查询。 您现在需要使用NativeQueryBuilder

至于您在回答中建议的解决方案:您不能只使用反应式实现来替代现有的命令式实现。

最简单的解决方案是不注入ElasticsearchTemplate ,而是使用ElasticsearchOperations接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM