从 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,您可能需要调整 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 版,客户端配置都使用来自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 应用程序上下文中可用
-
一个
RestClientbean,它是 Elasticsearch 客户端使用的配置好的低级RestClient -
一个
ElasticsearchClientbean,这是使用RestClient的新客户端 -
一个
ElasticsearchOperationsbean,以bean名称elasticsearchOperations和elasticsearchTemplate可用,它使用ElasticsearchClient
响应式风格配置
要在响应式环境中使用新客户端,唯一的区别是配置派生自的类
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
通过此配置,以下 Bean 将在 Spring 应用程序上下文中可用
-
一个
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,而该版本不存在。