从 4.2.x 升级到 4.3.x
本节介绍了从 4.2.x 版本到 4.3.x 版本的重大更改,以及如何用新引入的功能替换已删除的功能。
Elasticsearch 正在开发一个新的客户端,它将取代 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 版本之前,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
。