从 4.2.x 升级到 4.3.x

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

Elasticsearch 正在开发一个新的客户端来替换 `RestHighLevelClient`,因为 `RestHighLevelClient` 使用的是 Elasticsearch 核心库中的代码,而这些代码不再是 Apache 2 许可的。Spring Data Elasticsearch 也为此做好了准备。这意味着 `*Operations` 接口的内部实现需要更改——如果用户针对 `ElasticsearchOperations` 或 `ReactiveElasticsearchOperations` 等接口进行编程,则应该没有问题。如果您直接使用实现类,例如 `ElasticsearchRestTemplate`,则需要适应这些更改。

Spring Data Elasticsearch 还删除或替换了其 API 类和方法中来自 `org.elasticsearch` 包的类的使用,仅在其实现中使用它们来访问 Elasticsearch。对于用户来说,这意味着一些使用的枚举类已被 `org.springframework.data.elasticsearch` 中具有相同值的枚举类替换,这些枚举类在内部映射到 Elasticsearch 枚举类。

对于难以轻松替换的类使用情况,此用法已标记为已弃用,我们正在努力寻找替代方案。

请查看关于已弃用功能重大更改 的部分,了解更多详细信息。

已弃用功能

suggest 方法

在 `SearchOperations` 中(因此在 `ElasticsearchOperations` 中也是如此),采用 `org.elasticsearch.search.suggest.SuggestBuilder` 作为参数并返回 `org.elasticsearch.action.search.SearchResponse` 的 `suggest` 方法已弃用。请改用 `SearchHits<T> search(Query query, Class<T> clazz)`,传入包含 `SuggestBuilder` 的 `NativeSearchQuery`,并从返回的 `SearchHit<T>` 中读取 suggest 结果。

在 `ReactiveSearchOperations` 中,新的 `suggest` 方法现在返回 `Mono<org.springframework.data.elasticsearch.core.suggest.response.Suggest>`。此处旧方法也已弃用。

重大更改

从 API 中删除 `org.elasticsearch` 类。

  • 在 `org.springframework.data.elasticsearch.annotations.CompletionContext` 注解中,`type()` 属性已从 `org.elasticsearch.search.suggest.completion.context.ContextMapping.Type` 更改为 `org.springframework.data.elasticsearch.annotations.CompletionContext.ContextMappingType`,可用的枚举值相同。

  • 在 `org.springframework.data.elasticsearch.annotations.Document` 注解中,`versionType()` 属性已更改为 `org.springframework.data.elasticsearch.annotations.Document.VersionType`,可用的枚举值相同。

  • 在 `org.springframework.data.elasticsearch.core.query.Query` 接口中,`searchType()` 属性已更改为 `org.springframework.data.elasticsearch.core.query.Query.SearchType`,可用的枚举值相同。

  • 在 `org.springframework.data.elasticsearch.core.query.Query` 接口中,`timeout()` 的返回值已更改为 `java.time.Duration`。

  • `SearchHits<T>` 类不再包含 `org.elasticsearch.search.aggregations.Aggregations`。它现在包含 `org.springframework.data.elasticsearch.core.AggregationsContainer<T>` 类的实例,其中 `T` 是所用底层客户端的具体聚合类型。目前,这将是一个 `org .springframework.data.elasticsearch.core.clients.elasticsearch7.ElasticsearchAggregations` 对象;稍后将提供不同的实现。`ReactiveSearchOperations.aggregate()` 函数也进行了相同的更改,现在返回 `Flux<AggregationContainer<?>>`。使用聚合的程序需要更改为将返回值转换为适当的类以进一步处理它。

  • 以前可能抛出 `org.elasticsearch.ElasticsearchStatusException` 的方法现在将改为抛出 `org.springframework.data.elasticsearch.RestStatusException`。

处理 Query 的 field 和 sourceFilter 属性

在 4.2 版本之前,`Query` 的 `fields` 属性会被解释并添加到 `sourceFilter` 的 include 列表中。这是不正确的,因为对于 Elasticsearch 来说,它们是不同的东西。这已经得到纠正。因此,依赖于使用 `fields` 指定应从文档的 `_source` 中返回哪些字段的代码可能不再有效,应更改为使用 `sourceFilter`。

search_type 默认值

Elasticsearch 中 `search_type` 的默认值为 `query_then_fetch`。现在,这也设置为 `Query` 实现中的默认值,以前设置为 `dfs_query_then_fetch`。

BulkOptions 更改

`org.springframework.data.elasticsearch.core.query.BulkOptions` 类的某些属性已更改其类型

  • `timeout` 属性的类型已更改为 `java.time.Duration`。

  • `refreshPolicy` 属性的类型已更改为 `org.springframework.data.elasticsearch.core.RefreshPolicy`。

IndicesOptions 更改

Spring Data Elasticsearch 现在使用 `org.springframework.data.elasticsearch.core.query.IndicesOptions` 代替 `org.elasticsearch.action.support.IndicesOptions`。

Completion 类

`org.springframework.data.elasticsearch.core.completion` 包中的类已移动到 `org.springframework.data.elasticsearch.core.suggest`。

其他重命名

org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentPropertyConverter 接口已重命名为 org.springframework.data.elasticsearch.core.mapping.PropertyValueConverter。同样,命名为 XXPersistentPropertyConverter 的实现类已重命名为 XXPropertyValueConverter