从 4.2.x 升级到 4.3.x

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

Elasticsearch 正在开发一个新的客户端,它将取代 RestHighLevelClient,因为 RestHighLevelClient 使用了不再是 Apache 2 许可的 Elasticsearch 核心库中的代码。Spring Data Elasticsearch 也在为这一变化做准备。这意味着 *Operations 接口的内部实现需要改变 - 如果用户针对像 ElasticsearchOperationsReactiveElasticsearchOperations 这样的接口进行编程,这应该不成问题。如果您直接使用像 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>` 中读取建议结果。

在 `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 版本之前,Queryfields 属性被解释并添加到 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