從 4.4.x 升級到 5.0.x
本節描述從 4.4.x 版本到 5.0.x 版本的重大變更,以及如何用新引入的功能取代已移除的功能。
棄用
自訂追蹤層級記錄
現在已棄用透過設定屬性 logging.level.org.springframework.data.elasticsearch.client.WIRE=trace
進行記錄,Elasticsearch RestClient
提供了更好的解決方案,可以透過將 tracer
套件的記錄層級設定為 "trace" 來啟用。
org.springframework.data.elasticsearch.client.erhlc
套件
請參閱套件變更,此套件中的所有類別都已被棄用,因為預設要使用的用戶端實作是基於 Elasticsearch 新 Java Client 的實作,請參閱新的 Elasticsearch 用戶端
重大變更
套件變更
所有使用或依賴已棄用的 Elasticsearch RestHighLevelClient
的類別都已移至套件 org.springframework.data.elasticsearch.client.erhlc
。透過此變更,我們現在可以清楚地分隔使用舊的已棄用 Elasticsearch 程式庫的程式碼、使用新的 Elasticsearch 用戶端的程式碼以及獨立於用戶端實作的程式碼。此外,到目前為止提供的反應式實作也已移至此處,因為此實作包含從 Elasticsearch 程式庫複製和改編的程式碼。
如果您直接使用 ElasticsearchRestTemplate
而不是 ElasticsearchOperations
介面,您也需要調整您的匯入。
當使用 NativeSearchQuery
類別時,您需要切換到 NativeQuery
類別,它可以接受來自新的 Elasticsearch 用戶端程式庫的 Query
實例。您可以在測試程式碼中找到大量範例。
轉換為 Java 17 records
以下類別已轉換為 Record
,您可能需要調整 getter 方法的使用方式,從 getProp()
變更為 prop()
-
org.springframework.data.elasticsearch.core.AbstractReactiveElasticsearchTemplate.IndexResponseMetaData
-
org.springframework.data.elasticsearch.core.ActiveShardCount
-
org.springframework.data.elasticsearch.support.Version
-
org.springframework.data.elasticsearch.support.ScoreDoc
-
org.springframework.data.elasticsearch.core.query.ScriptData
-
org.springframework.data.elasticsearch.core.query.SeqNoPrimaryTerm
新的 HttpHeaders 類別
在 4.4 版本之前,用戶端組態使用來自 org.springframework:spring-web
專案的 HttpHeaders
類別。這引入了對該構件的依賴性。不使用 spring-web 的使用者會遇到找不到此類別的錯誤。
在 5.0 版本中,我們引入了自己的 HttpHeaders
來設定用戶端。
因此,如果您在用戶端組態中使用標頭,您需要將 org.springframework.http.HttpHeaders
替換為 org.springframework.data.elasticsearch.support.HttpHeaders
。
提示:您可以將 org.springframework.http .HttpHeaders
傳遞給 org.springframework.data.elasticsearch.support.HttpHeaders
的 addAll()
方法。
新的 Elasticsearch 用戶端
Spring Data Elasticsearch 現在使用新的 ElasticsearchClient
,並已棄用先前 RestHighLevelClient
的使用。
命令式樣式組態
若要設定 Spring Data Elasticsearch 以使用新的用戶端,必須建立一個衍生自 org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration
的組態 bean
@Configuration
public class NewRestClientConfig extends ElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
組態方式與舊用戶端相同,但不再需要建立多個組態 bean。透過此組態,以下 bean 將可在 Spring 應用程式內容中使用
-
一個
RestClient
bean,這是由 Elasticsearch 用戶端使用的已設定的低階RestClient
-
一個
ElasticsearchClient
bean,這是使用RestClient
的新用戶端 -
一個
ElasticsearchOperations
bean,可透過 bean 名稱 elasticsearchOperations 和 elasticsearchTemplate 取得,這使用ElasticsearchClient
反應式樣式組態
若要在反應式環境中使用新的用戶端,唯一的區別是衍生組態的類別
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
透過此組態,以下 bean 將可在 Spring 應用程式內容中使用
-
一個
RestClient
bean,這是由 Elasticsearch 用戶端使用的已設定的低階RestClient
-
一個
ReactiveElasticsearchClient
bean,這是使用RestClient
的新反應式用戶端 -
一個
ReactiveElasticsearchOperations
bean,可透過 bean 名稱 reactiveElasticsearchOperations 和 reactiveElasticsearchTemplate 取得,這使用ReactiveElasticsearchClient
仍然想使用舊的用戶端嗎?
舊的已棄用 RestHighLevelClient
仍然可以使用,但您需要將依賴項明確地新增到您的應用程式,因為 Spring Data Elasticsearch 不再自動引入它
<!-- include the RHLC, specify version explicitly -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.5</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
請務必明確指定版本 7.17.6,否則 maven 將解析為 8.5.0,而此版本不存在。