从 4.2.x 升级到 4.3.x
本节描述了从版本 4.2.x 到 4.3.x 的重大变更,以及如何通过新引入的特性来替换已移除的特性。
Elasticsearch 正在开发一个新的客户端,它将取代 RestHighLevelClient
,因为 RestHighLevelClient
使用了 Elasticsearch 核心库中的代码,而这些代码不再使用 Apache 2 许可证。Spring Data Elasticsearch 也在为这一变化做准备。这意味着 *Operations
接口的内部实现需要更改——如果用户面向接口编程(如 ElasticsearchOperations
或 ReactiveElasticsearchOperations
),这应该不会有问题。如果你直接使用实现类(如 ElasticsearchRestTemplate
),则需要适应这些变化。
Spring Data Elasticsearch 还移除或替换了其 API 类和方法中来自 org.elasticsearch
包的类的使用,仅在实现 Elasticsearch 访问的地方使用它们。对于用户来说,这意味着一些使用的枚举类被替换为位于 org.springframework.data.elasticsearch
中的具有相同值的枚举类,这些枚举类在内部映射到 Elasticsearch 的对应类。
在使用无法轻易替换的类的地方,这种使用被标记为弃用,我们正在努力寻找替代方案。
弃用
建议方法
在 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
的包含列表中。这是不正确的,因为对于 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。