從 4.2.x 升級到 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 的存取。對於使用者而言,這表示一些曾使用的 enum 類別已被替換為位於 org.springframework.data.elasticsearch 中具有相同值的 enum,這些 enum 在內部會映射到 Elasticsearch 的 enum。

在無法輕易替換類別的地方,此用法會標記為已棄用,我們正在努力尋找替代方案。

請查看關於棄用重大變更的章節以獲取更多詳細資訊。

棄用

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,可用的 enum 值相同。

  • org.springframework.data.elasticsearch.annotations.Document 註解中,versionType() 屬性已變更為 org.springframework.data.elasticsearch.annotations.Document.VersionType,可用的 enum 值相同。

  • org.springframework.data.elasticsearch.core.query.Query 介面中,searchType() 屬性已變更為 org.springframework.data.elasticsearch.core.query.Query.SearchType,可用的 enum 值相同。

  • 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 的 include 列表中。這是錯誤的,因為對於 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