從 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