从 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.SearchResponsesuggest 方法已被弃用。请改用 SearchHits<T> search(Query query, Class<T> clazz) 方法,传入可以包含 SuggestBuilderNativeSearchQuery,并从返回的 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 版本,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

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