从 4.2.x 升级到 4.3.x

本节描述了从版本 4.2.x 到 4.3.x 的破坏性变更,以及如何使用新引入的功能替代已被移除的功能。spring-doc.cadn.net.cn

Elasticsearch 正在开发一个新的客户端,它将取代 RestHighLevelClient,因为 RestHighLevelClient 使用了来自 Elasticsearch 核心库的代码,而这些代码不再采用 Apache 2 许可证。 Spring Data Elasticsearch 也在为这一变更做准备。 这意味着内部针对 *Operations 接口的实现需要进行调整——如果用户是面向如 ElasticsearchOperationsReactiveElasticsearchOperations 这样的接口进行编程,这应该不会成为问题。 如果您直接使用如 ElasticsearchRestTemplate 这样的实现类,则需要适应这些变更。spring-doc.cadn.net.cn

Spring Data Elasticsearch 还从其 API 类和方法中移除或替换了来自 org.elasticsearch 包的类的使用,仅在实现访问 Elasticsearch 的具体实现部分使用它们。 对用户而言,这意味着某些曾经使用的枚举类已被替换为位于 org.springframework.data.elasticsearch 中具有相同值的枚举类,这些枚举在内部会映射到 Elasticsearch 对应的枚举。spring-doc.cadn.net.cn

无法轻松替换的类使用位置,此用法已标记为弃用,我们正在开发替代方案。spring-doc.cadn.net.cn

请查看已弃用功能破坏性变更部分以获取更多详情。spring-doc.cadn.net.cn

弃用

建议方法

SearchOperations 中,因此在 ElasticsearchOperations 中也是如此,接受 org.elasticsearch.search.suggest.SuggestBuilder 作为参数并返回 org.elasticsearch.action.search.SearchResponsesuggest 方法已被弃用。 请改用 SearchHits<T> search(Query query, Class<T> clazz),传入一个可包含 SuggestBuilderNativeSearchQuery,并从返回的 SearchHit<T> 中读取建议结果。spring-doc.cadn.net.cn

ReactiveSearchOperations 中,新的 suggest 方法现在返回一个 Mono<org.springframework.data.elasticsearch.core.suggest.response.Suggest>。 此处旧方法也被标记为弃用。spring-doc.cadn.net.cn

重大变更

移除org.elasticsearch来自 API 的类。

  • org.springframework.data.elasticsearch.annotations.CompletionContext 注解中,属性 type() 已从 org.elasticsearch.search.suggest.completion.context.ContextMapping.Type 更改为 org.springframework.data.elasticsearch.annotations.CompletionContext.ContextMappingType,可用的枚举值保持不变。spring-doc.cadn.net.cn

  • org.springframework.data.elasticsearch.annotations.Document 注解中,versionType() 属性已更改为 org.springframework.data.elasticsearch.annotations.Document.VersionType,可用的枚举值保持不变。spring-doc.cadn.net.cn

  • org.springframework.data.elasticsearch.core.query.Query 接口中,searchType() 属性已更改为 org.springframework.data.elasticsearch.core.query.Query.SearchType,可用的枚举值保持不变。spring-doc.cadn.net.cn

  • org.springframework.data.elasticsearch.core.query.Query 接口中,timeout() 的返回值已更改为 java.time.Durationspring-doc.cadn.net.cn

  • 不再包含 SearchHits<T>`class does not contain the `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<?>>。 使用聚合的程序需要修改,将返回值强制转换为适当的类以便进一步处理。spring-doc.cadn.net.cn

  • 原本可能抛出 org.elasticsearch.ElasticsearchStatusException 的方法,现在将改为抛出 org.springframework.data.elasticsearch.RestStatusExceptionspring-doc.cadn.net.cn

处理查询的 field 和 sourceFilter 属性

在 4.2 版本之前,fieldsQuery 属性会被解析并添加到 sourceFilter 的包含列表中。 这是不正确的,因为对于 Elasticsearch 而言,这些是不同的概念。 此问题已得到修正。 因此,依赖使用 fields 来指定应从文档的 _source' and should be changed to use the `sourceFilter 返回哪些字段的代码可能不再正常工作。spring-doc.cadn.net.cn

search_type 默认值

Elasticsearch 中 search_type 的默认值为 query_then_fetch。 现在,这也已被设置为 Query 实现中的默认值,而此前其值为 dfs_query_then_fetchspring-doc.cadn.net.cn

BulkOptions 变更

org.springframework.data.elasticsearch.core.query.BulkOptions 类的一些属性已更改其类型:spring-doc.cadn.net.cn

IndicesOptions 变更

Spring Data Elasticsearch 现在使用 org.springframework.data.elasticsearch.core.query.IndicesOptions 而不是 org.elasticsearch.action.support.IndicesOptionsspring-doc.cadn.net.cn

完成类

来自包 org.springframework.data.elasticsearch.core.completion 的类已移至 org.springframework.data.elasticsearch.core.suggestspring-doc.cadn.net.cn

其他重命名

org.springframework.data.elasticsearch.core.mapping.ElasticsearchPersistentPropertyConverter 接口已重命名为 org.springframework.data.elasticsearch.core.mapping.PropertyValueConverter。 同样,名为 XXPersistentPropertyConverter 的实现类也已重命名为 XXPropertyValueConverterspring-doc.cadn.net.cn