此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.4.0! |
从 4.4.x 升级到 5.0.x
本节介绍从版本 4.4.x 到 5.0.x 的重大更改,以及如何将已删除的功能替换为新引入的功能。
弃用
自定义跟踪记录级别日志记录
通过设置属性logging.level.org.springframework.data.elasticsearch.client.WIRE=trace
现已弃用,则 ElasticsearchRestClient
提供了更好的解决方案,可以通过设置tracer
package 添加到 “trace” 中。
org.springframework.data.elasticsearch.client.erhlc
包
请参阅包更改,此包中的所有类都已弃用,因为要使用的默认客户端实现是基于 Elasticsearch 的新 Java 客户端的实现,请参阅新的 Elasticsearch 客户端
重大更改
套餐更改
使用或依赖于已弃用的 Elasticsearch 的所有类RestHighLevelClient
已移动到包org.springframework.data.elasticsearch.client.erhlc
.
通过此更改,我们现在明确区分了使用旧的已弃用 Elasticsearch 库的代码、使用新 Elasticsearch 客户端的代码以及独立于客户端实现的代码。
此外,到目前为止提供的反应式实现已移至此处,因为此实现包含从 Elasticsearch 库复制和改编的代码。
如果您正在使用ElasticsearchRestTemplate
直接,而不是ElasticsearchOperations
界面中,您还需要调整导入。
使用NativeSearchQuery
类中,您需要切换到NativeQuery
类,该类可以采用Query
实例。
您将在测试代码中找到大量示例。
转换为 Java 17 条记录
以下类已转换为Record
中,您可能需要将 getter 方法的使用从getProp()
自prop()
:
-
org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData
-
org.springframework.data.elasticsearch.core.ActiveShardCount
-
org.springframework.data.elasticsearch.support.Version
-
org.springframework.data.elasticsearch.support.ScoreDoc
-
org.springframework.data.elasticsearch.core.query.ScriptData
-
org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm
新的 HttpHeaders 类
在版本 4.4 之前,客户端配置使用HttpHeaders
类org.springframework:spring-web
项目。
这会引入对该构件的依赖关系。
不使用 spring-web 的用户将面临错误,因为找不到此类。
在 5.0 版本中,我们引入了自己的HttpHeaders
配置客户端。
因此,如果您在客户端配置中使用标头,则需要将org.springframework.http.HttpHeaders
跟org.springframework.data.elasticsearch.support.HttpHeaders
.
提示:您可以传递org.springframework.http
.HttpHeaders
到addAll()
method 的org.springframework.data.elasticsearch.support.HttpHeaders
.
新的 Elasticsearch 客户端
Spring Data Elasticsearch 现在使用新的ElasticsearchClient
并已弃用以前的RestHighLevelClient
.
命令式样式配置
要将 Spring Data Elasticsearch 配置为使用新客户端,必须创建一个派生自org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration
:
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
配置以与旧 Client 端相同的方式完成,但不再需要创建除配置 bean 之外的更多内容。 使用此配置,以下 bean 将在 Spring 应用程序上下文中可用:
-
一个
RestClient
bean,即配置的低级别RestClient
由 Elasticsearch 客户端使用 -
一
ElasticsearchClient
bean,这是使用RestClient
-
一
ElasticsearchOperations
bean,可通过 bean 名称 elasticsearchOperations 和 elasticsearchTemplate 获得,它使用ElasticsearchClient
反应式样式配置
要在反应式环境中使用新客户端,唯一的区别是要从中派生配置的类:
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
使用此配置,以下 bean 将在 Spring 应用程序上下文中可用:
-
一个
RestClient
bean,即配置的低级别RestClient
由 Elasticsearch 客户端使用 -
一
ReactiveElasticsearchClient
bean,这是使用RestClient
-
一
ReactiveElasticsearchOperations
bean,可通过 bean 名称 reactiveElasticsearchOperations 和 reactiveElasticsearchTemplate 获得,它使用ReactiveElasticsearchClient
仍想使用旧客户端?
旧的已弃用RestHighLevelClient
仍然可以使用,但您需要将依赖项显式添加到您的应用程序中,因为 Spring Data Elasticsearch 不再自动将其拉入:
<!-- include the RHLC, specify version explicitly -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
确保明确指定版本 7.17.6,否则 maven 将解析为 8.5.0,并且不存在。