跳到主要内容

从 4.1.x 升级到 4.2.x

DeepSeek V3 中英对照 Upgrading from 4.1.x to 4.2.x

本节介绍了从版本 4.1.x 到 4.2.x 的重大更改,以及如何通过新引入的功能替换已移除的功能。

弃用

@Document 参数

与索引设置相关的 @Document 注解参数(useServerConfigurationshardsreplicasrefreshIntervallindexStoretype)已移至 @Setting 注解。在 @Document 中使用这些参数仍然可行,但已弃用。

移除内容

在 4.0 版本中,用于在实体中设置分数返回值的 @Score 注解已被弃用并移除。分数值现在封装在返回实体的 SearchHit 实例中返回。

org.springframework.data.elasticsearch.ElasticsearchException 类已被移除。剩余的用法已被替换为 org.springframework.data.mapping.MappingExceptionorg.springframework.dao.InvalidDataAccessApiUsageException

已弃用的 ScoredPageScrolledPage@AggregatedPage 及其实现已被移除。

已弃用的 GetQueryDeleteQuery 已被移除。

ReactiveSearchOperationsReactiveDocumentOperations 中已弃用的 find 方法已被移除。

重大变更

刷新策略

Enum 包已更改

在 4.1 版本中,可以通过在自定义配置类中重写 AbstractReactiveElasticsearchConfiguration.refreshPolicy() 方法来配置 ReactiveElasticsearchTemplate 的刷新策略。该方法的返回值是 org.elasticsearch.action.support.WriteRequest.RefreshPolicy 类的一个实例。

现在配置必须返回 org.springframework.data.elasticsearch.core.RefreshPolicy。这个枚举具有相同的值,并且会触发与之前相同的行为,因此只需要调整 import 语句即可。

刷新行为

ElasticsearchOperationsReactiveElasticsearchOperations 现在明确使用模板上设置的 RefreshPolicy 来处理写请求(如果不为 null)。如果刷新策略为 null,则不执行任何特殊操作,因此将使用集群的默认设置。在此版本之前,ElasticsearchOperations 始终使用集群的默认设置。

提供的 ElasticsearchRepositoryReactiveElasticsearchRepository 实现将在刷新策略为 null 时执行显式刷新。这与之前版本的行为相同。如果设置了刷新策略,则存储库也将使用该策略。

刷新配置

在按照 Elasticsearch Clients 中描述的方式配置 Spring Data Elasticsearch 时,使用 ElasticsearchConfigurationSupportAbstractElasticsearchConfigurationAbstractReactiveElasticsearchConfiguration,刷新策略(refresh policy)将被初始化为 null。之前,响应式代码会将其初始化为 IMMEDIATE,现在响应式和非响应式代码的行为保持一致。

方法返回类型

删除接受 Query 参数的方法

之前响应式方法返回的是一个 Mono<Long>,表示被删除文档的数量,而非响应式版本则返回 void。现在它们返回一个 Mono<ByQueryResponse>,其中包含了关于被删除文档和可能发生的错误的更详细信息。

multiget 方法

之前 multiget 的实现对于非响应式实现仅返回找到的实体到一个 List<T> 中,而对于响应式实现则返回到一个 Flux<T> 中。如果请求中包含未找到的 id,这些缺失的信息是不可用的。用户需要将返回的 id 与请求的 id 进行比较,以找出哪些 id 缺失。

现在,multiget 方法为每个请求的 ID 返回一个 MultiGetItem。该对象包含有关失败的信息(例如不存在的索引)以及项目是否存在的信息(如果存在,则包含在 MultiGetItem 中)。