从 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 应用程序上下文中可用:
-
一个 `RestClient` Bean,它是 Elasticsearch 客户端使用的已配置的低级 `RestClient`
-
一个 `ElasticsearchClient` Bean,这是使用 `RestClient` 的新客户端
-
一个名为elasticsearchOperations和elasticsearchTemplate的
ElasticsearchOperations
bean,它使用ElasticsearchClient
。
响应式配置
要在响应式环境中使用新的客户端,唯一的区别在于派生配置的类。
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
使用此配置,以下 bean 将在 Spring 应用程序上下文中可用:
-
一个 `RestClient` Bean,它是 Elasticsearch 客户端使用的已配置的低级 `RestClient`
-
一个
ReactiveElasticsearchClient
bean,这是使用RestClient
的新响应式客户端。 -
一个名为reactiveElasticsearchOperations和reactiveElasticsearchTemplate的
ReactiveElasticsearchOperations
bean,它使用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,而该版本不存在。