|
此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Data Elasticsearch 6.0.4! |
从 4.4.x 升级到 5.0.x
本节描述了从 4.4.x 版本到 5.0.x 版本的破坏性变更,以及如何用新引入的功能替代已被移除的功能。
弃用
自定义跟踪级别日志记录
通过设置属性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace 进行日志记录的方式现已弃用,Elasticsearch RestClient 提供了更优的解决方案,只需将 tracer 包的日志级别设置为 "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 类,该类可以接受来自新版 Elasticsearch 客户端库的 Query 实例。
您可以在测试代码中找到大量示例。
转换为 Java 17 记录
以下类已转换为 Record,您可能需要将从 getProp() 到 prop() 的 getter 方法用法进行调整:
-
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 版本,客户端配置使用的是来自 org.springframework:spring-web 项目的 HttpHeaders 类。
这引入了对该构件的依赖。
如果不使用 spring-web 的用户将会遇到错误,因为无法找到该类。
在 5.0 版本中,我们引入了自己的HttpHeaders来配置客户端。
因此,如果您在客户端配置中使用标头,则需要将 org.springframework.http.HttpHeaders 替换为 org.springframework.data.elasticsearch.support.HttpHeaders。
提示:您可以将 org.springframework.http
.HttpHeaders 传递给 org.springframework.data.elasticsearch.support.HttpHeaders 的 addAll() 方法。
新的 Elasticsearch 客户端
Spring Data Elasticsearch 现在使用新的 ElasticsearchClient,并已将之前的 RestHighLevelClient 标记为弃用。
命令式风格配置
要配置 Spring Data Elasticsearch 以使用新客户端,需要创建一个派生自 org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration 的配置 Bean:
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
配置方式与旧客户端相同,但不再需要创建除配置 Bean 之外的其他内容。 通过此配置,以下 Bean 将在 Spring 应用上下文中可用:
-
a
RestClientbean,即由 Elasticsearch 客户端使用的已配置的低级RestClient -
一个
ElasticsearchClientBean,这是使用RestClient的新客户端 -
一个
ElasticsearchOperationsBean,可通过名称 elasticsearchOperations 和 elasticsearchTemplate 获取,它使用了ElasticsearchClient
响应式风格配置
要在响应式环境中使用新客户端,唯一的区别在于用于派生配置的类:
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
使用此配置,以下 Bean 将在 Spring 应用上下文中可用:
-
a
RestClientbean,即由 Elasticsearch 客户端使用的已配置的低级RestClient -
一个
ReactiveElasticsearchClientBean,这是使用RestClient的新响应式客户端。 -
一个
ReactiveElasticsearchOperationsBean,可通过 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,而该版本并不存在。