跳到主要内容

从 4.2.x 升级到 4.3.x

DeepSeek V3 中英对照 Upgrading from 4.2.x to 4.3.x

本节描述了从版本 4.2.x 到 4.3.x 的重大变更,以及如何通过新引入的特性来替换已移除的特性。

备注

Elasticsearch 正在开发一个新的客户端,它将取代 RestHighLevelClient,因为 RestHighLevelClient 使用了 Elasticsearch 核心库中的代码,而这些代码不再使用 Apache 2 许可证。Spring Data Elasticsearch 也在为这一变化做准备。这意味着 *Operations 接口的内部实现需要更改——如果用户面向接口编程(如 ElasticsearchOperationsReactiveElasticsearchOperations),这应该不会有问题。如果你直接使用实现类(如 ElasticsearchRestTemplate),则需要适应这些变化。

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

在使用无法轻易替换的类的地方,这种使用被标记为弃用,我们正在努力寻找替代方案。

有关更多详细信息,请查看 弃用破坏性变更 部分。

弃用

建议方法

SearchOperations 以及 ElasticsearchOperations 中,那些接受 org.elasticsearch.search.suggest.SuggestBuilder 作为参数并返回 org.elasticsearch.action.search.SearchResponsesuggest 方法已被弃用。请改用 SearchHits<T> search(Query query, Class<T> clazz) 方法,并传入一个可以包含 SuggestBuilderNativeSearchQuery,然后从返回的 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 的包含列表中。这是不正确的,因为对于 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

索引选项更改

Spring Data Elasticsearch 现在使用 org.springframework.data.elasticsearch.core.query.IndicesOptions 而不是 org.elasticsearch.action.support.IndicesOptions

完成类

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