从 4.1.x 升级到 4.2.x

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

弃用

@Document 参数

与索引设置相关的 `@Document` 注解的参数(`useServerConfiguration`、`shards`、`replicas`、`refreshIntervall` 和 `indexStoretype`)已移至 `@Setting` 注解。在 `@Document` 中仍然可以使用,但已弃用。

移除

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

`org.springframework.data.elasticsearch.ElasticsearchException` 类已被移除。其余用法已被 `org.springframework.data.mapping.MappingException` 和 `org.springframework.dao.InvalidDataAccessApiUsageException` 替换。

已弃用的 `ScoredPage`、`ScrolledPage`、`@AggregatedPage` 和其实现已被移除。

已弃用的 `GetQuery` 和 `DeleteQuery` 已被移除。

已弃用的 `ReactiveSearchOperations` 和 `ReactiveDocumentOperations` 中的 `find` 方法已被移除。

重大更改

刷新策略

枚举包已更改

在 4.1 中,可以通过在自定义配置类中覆盖 `AbstractReactiveElasticsearchConfiguration.refreshPolicy()` 方法来配置 `ReactiveElasticsearchTemplate` 的刷新策略。此方法的返回值是 `org.elasticsearch.action.support.WriteRequest.RefreshPolicy` 类的实例。

现在配置必须返回 `org.springframework.data.elasticsearch.core.RefreshPolicy`。此枚举具有与以前相同的数值并触发相同的行为,因此只需调整 `import` 语句。

刷新行为

`ElasticsearchOperations` 和 `ReactiveElasticsearchOperations` 现在在写入请求时,如果 `RefreshPolicy` 不为 null,则显式使用在模板上设置的 `RefreshPolicy`。如果刷新策略为 null,则不会执行任何特殊操作,因此将使用集群默认值。在此版本之前,`ElasticsearchOperations` 始终使用集群默认值。

`ElasticsearchRepository` 和 `ReactiveElasticsearchRepository` 的提供的实现将在刷新策略为 null 时执行显式刷新。这与以前版本的行为相同。如果设置了刷新策略,则仓库也将使用它。

刷新配置

当使用 `ElasticsearchConfigurationSupport`、`AbstractElasticsearchConfiguration` 或 `AbstractReactiveElasticsearchConfiguration` 配置 Spring Data Elasticsearch (如 Elasticsearch 客户端 中所述)时,刷新策略将初始化为 `null`。以前,响应式代码将其初始化为 `IMMEDIATE`,现在响应式和非响应式代码显示相同的行为。

方法返回类型

接受 Query 的 delete 方法

响应式方法以前返回包含已删除文档数量的 `Mono<Long>`,非响应式版本为 void。它们现在返回一个 `Mono<ByQueryResponse>`,其中包含有关已删除文档和可能发生的错误的更详细信息。

multiget 方法

以前,`multiget` 的实现仅在非响应式实现中返回 `List<T>` 中找到的实体,在响应式实现中返回 `Flux<T>` 中找到的实体。如果请求包含未找到的 ID,则无法获得这些 ID 丢失的信息。用户需要将返回的 ID 与请求的 ID 进行比较,以查找哪些 ID 丢失了。

现在,`multiget` 方法为每个请求的 ID 返回一个 `MultiGetItem`。这包含有关失败(例如不存在的索引)的信息以及项目是否存在的信息(然后它包含在 `MultiGetItem` 中)或不存在。