从 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 客户端

移除已弃用的代码

DateFormat.noneDateFormat.custom 自 4.2 版本以来已弃用,现已移除。

自 4.2 以来已弃用的 @Document 的属性已移除。为此,请使用 @Settings 注释。

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

重大更改

移除已弃用的调用

已移除操作接口中的 suggest 调用

SearchOperationsReactiveSearchOperations 都已弃用使用 Elasticsearch 类作为参数的调用。这些调用现已移除,因此已清理了这些 API 中对 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` bean,可使用 bean 名称 *elasticsearchOperations* 和 *elasticsearchTemplate* 获得,它使用 `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` bean,可使用 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,而此版本不存在。