从 4.1.x 升级到 4.2.x
本节介绍了从版本 4.1.x 到 4.2.x 的重大更改,以及如何通过新引入的功能替换已移除的功能。
弃用
@Document 参数
与索引设置相关的 @Document
注解参数(useServerConfiguration
、shards
、replicas
、refreshIntervall
和 indexStoretype
)已移至 @Setting
注解。在 @Document
中使用这些参数仍然可行,但已弃用。
移除内容
在 4.0 版本中,用于在实体中设置分数返回值的 @Score
注解已被弃用并移除。分数值现在封装在返回实体的 SearchHit
实例中返回。
org.springframework.data.elasticsearch.ElasticsearchException
类已被移除。剩余的用法已被替换为 org.springframework.data.mapping.MappingException
和 org.springframework.dao.InvalidDataAccessApiUsageException
。
已弃用的 ScoredPage
、ScrolledPage
和 @AggregatedPage
及其实现已被移除。
已弃用的 GetQuery
和 DeleteQuery
已被移除。
ReactiveSearchOperations
和 ReactiveDocumentOperations
中已弃用的 find
方法已被移除。
重大变更
刷新策略
Enum 包已更改
在 4.1 版本中,可以通过在自定义配置类中重写 AbstractReactiveElasticsearchConfiguration.refreshPolicy()
方法来配置 ReactiveElasticsearchTemplate
的刷新策略。该方法的返回值是 org.elasticsearch.action.support.WriteRequest.RefreshPolicy
类的一个实例。
现在配置必须返回 org.springframework.data.elasticsearch.core.RefreshPolicy
。这个枚举具有相同的值,并且会触发与之前相同的行为,因此只需要调整 import
语句即可。
刷新行为
ElasticsearchOperations
和 ReactiveElasticsearchOperations
现在明确使用模板上设置的 RefreshPolicy
来处理写请求(如果不为 null)。如果刷新策略为 null,则不执行任何特殊操作,因此将使用集群的默认设置。在此版本之前,ElasticsearchOperations
始终使用集群的默认设置。
提供的 ElasticsearchRepository
和 ReactiveElasticsearchRepository
实现将在刷新策略为 null
时执行显式刷新。这与之前版本的行为相同。如果设置了刷新策略,则存储库也将使用该策略。
刷新配置
在按照 Elasticsearch Clients 中描述的方式配置 Spring Data Elasticsearch 时,使用 ElasticsearchConfigurationSupport
、AbstractElasticsearchConfiguration
或 AbstractReactiveElasticsearchConfiguration
,刷新策略(refresh policy)将被初始化为 null
。之前,响应式代码会将其初始化为 IMMEDIATE
,现在响应式和非响应式代码的行为保持一致。
方法返回类型
删除接受 Query 参数的方法
之前响应式方法返回的是一个 Mono<Long>
,表示被删除文档的数量,而非响应式版本则返回 void
。现在它们返回一个 Mono<ByQueryResponse>
,其中包含了关于被删除文档和可能发生的错误的更详细信息。
multiget 方法
之前 multiget 的实现对于非响应式实现仅返回找到的实体到一个 List<T>
中,而对于响应式实现则返回到一个 Flux<T>
中。如果请求中包含未找到的 id,这些缺失的信息是不可用的。用户需要将返回的 id 与请求的 id 进行比较,以找出哪些 id 缺失。
现在,multiget
方法为每个请求的 ID 返回一个 MultiGetItem
。该对象包含有关失败的信息(例如不存在的索引)以及项目是否存在的信息(如果存在,则包含在 MultiGetItem
中)。