从 4.4.x 升级到 5.0.x

本节描述了从 4.4.x 版本到 5.0.x 版本的破坏性变更,以及如何用新引入的功能替代已被移除的功能。spring-doc.cadn.net.cn

弃用

自定义跟踪级别日志记录

通过设置属性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace 进行日志记录的方式现已弃用,Elasticsearch RestClient 提供了更优的解决方案,只需将 tracer 包的日志级别设置为 "trace" 即可启用。spring-doc.cadn.net.cn

org.springframework.data.elasticsearch.client.erhlc

请参阅 包变更,此包中的所有类均已弃用,因为默认使用的客户端实现是基于新的 Elasticsearch Java 客户端的实现,请参阅 新的 Elasticsearch 客户端spring-doc.cadn.net.cn

移除已弃用的代码

DateFormat.noneDateFormat.custom 自 4.2 版本起已被弃用,并已被移除。spring-doc.cadn.net.cn

自 4.2 版本起已弃用的 @Document 属性已被移除。 请对这些情况使用 @Settings 注解。spring-doc.cadn.net.cn

@DynamicMapping@DynamicMappingValue 已被移除。 请改用 @Document.dynamic@Field.dynamicspring-doc.cadn.net.cn

重大变更

移除已弃用的调用

操作接口中的建议调用已被移除

SearchOperationsReactiveSearchOperations 都包含已弃用的调用,这些调用使用 Elasticsearch 类作为参数。 现已移除这些调用,因此清理了这些 API 中对 Elasticsearch 类的依赖。spring-doc.cadn.net.cn

包变更

所有使用或依赖于已弃用的 Elasticsearch RestHighLevelClient 的类都已移至 org.springframework.data.elasticsearch.client.erhlc 包。 通过此更改,我们现在可以清晰地将使用旧版已弃用 Elasticsearch 库的代码、使用新版 Elasticsearch 客户端的代码以及独立于客户端实现的代码分离开来。 此外,此前提供的响应式实现也已移至此位置,因为该实现包含从 Elasticsearch 库中复制并适配的代码。spring-doc.cadn.net.cn

如果您直接使用 ElasticsearchRestTemplate 而非 ElasticsearchOperations 接口,您还需要调整您的导入语句。spring-doc.cadn.net.cn

当使用 NativeSearchQuery 类时,您需要切换到 NativeQuery 类,该类可以接受来自新版 Elasticsearch 客户端库的 Query 实例。 您可以在测试代码中找到大量示例。spring-doc.cadn.net.cn

转换为 Java 17 记录

以下类已转换为 Record,您可能需要将从 getProp()prop() 的 getter 方法用法进行调整:spring-doc.cadn.net.cn

新的 HttpHeaders 类

直到 4.4 版本,客户端配置使用的是来自 org.springframework:spring-web 项目的 HttpHeaders 类。 这引入了对该构件的依赖。 如果不使用 spring-web 的用户将会遇到错误,因为无法找到该类。spring-doc.cadn.net.cn

在 5.0 版本中,我们引入了自己的HttpHeaders来配置客户端。spring-doc.cadn.net.cn

因此,如果您在客户端配置中使用标头,则需要将 org.springframework.http.HttpHeaders 替换为 org.springframework.data.elasticsearch.support.HttpHeadersspring-doc.cadn.net.cn

提示:您可以将 org.springframework.http .HttpHeaders 传递给 org.springframework.data.elasticsearch.support.HttpHeadersaddAll() 方法。spring-doc.cadn.net.cn

新的 Elasticsearch 客户端

Spring Data Elasticsearch 现在使用新的 ElasticsearchClient,并已将之前的 RestHighLevelClient 标记为弃用。spring-doc.cadn.net.cn

命令式风格配置

要配置 Spring Data Elasticsearch 以使用新客户端,需要创建一个派生自 org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration 的配置 Bean:spring-doc.cadn.net.cn

@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}

配置方式与旧客户端相同,但不再需要创建除配置 Bean 之外的其他内容。 通过此配置,以下 Bean 将在 Spring 应用上下文中可用:spring-doc.cadn.net.cn

  • a RestClient bean,即由 Elasticsearch 客户端使用的已配置的低级RestClientspring-doc.cadn.net.cn

  • 一个 ElasticsearchClient Bean,这是使用 RestClient 的新客户端spring-doc.cadn.net.cn

  • 一个 ElasticsearchOperations Bean,可通过名称 elasticsearchOperationselasticsearchTemplate 获取,它使用了 ElasticsearchClientspring-doc.cadn.net.cn

响应式风格配置

要在响应式环境中使用新客户端,唯一的区别在于用于派生配置的类:spring-doc.cadn.net.cn

@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {

	@Override
	public ClientConfiguration clientConfiguration() {
		return ClientConfiguration.builder() //
			.connectedTo("localhost:9200") //
			.build();
	}
}

使用此配置,以下 Bean 将在 Spring 应用上下文中可用:spring-doc.cadn.net.cn

  • a RestClient bean,即由 Elasticsearch 客户端使用的已配置的低级RestClientspring-doc.cadn.net.cn

  • 一个 ReactiveElasticsearchClient Bean,这是使用 RestClient 的新响应式客户端。spring-doc.cadn.net.cn

  • 一个 ReactiveElasticsearchOperations Bean,可通过 Bean 名称 reactiveElasticsearchOperationsreactiveElasticsearchTemplate 获取,它使用了 ReactiveElasticsearchClientspring-doc.cadn.net.cn

仍然想使用旧客户端吗?

已弃用的旧版 RestHighLevelClient 仍可使用,但您需要将其依赖显式添加到您的应用程序中,因为 Spring Data Elasticsearch 不再自动引入它:spring-doc.cadn.net.cn

<!-- 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,而该版本并不存在。spring-doc.cadn.net.cn