Upgrading from 4.4.x to 5.0.x

本节描述了从 4.4.x 版至 5.0.x 版的重大更改,以及如何通过新引入的功能替换已移除的功能。

Deprecations

Custom trace level logging

通过设置属性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace 进行日志记录现已弃用,Elasticsearch RestClient 提供了可通过将 tracer 包的日志级别设置为“trace”来激活的更佳解决方案。

org.springframework.data.elasticsearch.client.erhlc package

请参见 Package changes,此程序包中的所有类都已弃用,因为要使用的默认客户端实现是基于 Elasticsearch 的新 Java 客户端,请参见 New Elasticsearch client

Removal of deprecated code

DateFormat.noneDateFormat.custom 自 4.2 版起已被弃用,现已移除。

自 4.2 版起已弃用的 @Document 的属性现已移除。请对它们使用 @Settings 注释。

@DynamicMapping@DynamicMappingValue 已被移除。请改用 @Document.dynamic@Field.dynamic

Breaking Changes

Removal of deprecated calls

suggest calls in operations interfaces have been removed

SearchOperationsReactiveSearchOperations 都有已被弃用的使用 Elasticsearch 类作为参数的调用。现已删除它们,因此已消除这些 API 中对 Elasticsearch 类依赖。

Package changes

所有使用或依赖已弃用 Elasticsearch RestHighLevelClient 的类现已移至包 org.springframework.data.elasticsearch.client.erhlc。通过此更改,我们现在可以清楚地区分使用旧的已弃用 Elasticsearch 库的代码、使用新的 Elasticsearch 客户端的代码和与客户端实现无关的代码。目前提供的响应式实现也已移至这里,因为此实现包含从 Elasticsearch 库中复制和改编的代码。

如果你直接使用 ElasticsearchRestTemplate,而不使用 ElasticsearchOperations 接口,你需要调整自己的导入。

使用 NativeSearchQuery 类时,你需要切换到 NativeQuery 类,它可以使用新 Elasticsearch 客户端库提供的 Query 实例。可以在测试代码中找到大量示例。

Conversion to Java 17 records

以下类已转换为 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

New HttpHeaders class

在 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.HttpHeadersaddAll() 方法。

New Elasticsearch client

Spring Data Elasticsearch 现在使用新的 ElasticsearchClient,已弃用之前的 RestHighLevelClient

Imperative style configuration

要配置 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 bean,可通过 Bean 名称 elasticsearchOperationselasticsearchTemplate 使用,它使用 ElasticsearchClient

Reactive style configuration

要在反应式环境中使用新客户端,唯一的区别在于用于导出配置的类:

@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 bean,可通过 Bean 名称 reactiveElasticsearchOperationsreactiveElasticsearchTemplate 使用,它使用 ReactiveElasticsearchClient

Still want to use the old client?

旧的已弃用的 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 而该版本不存在。