從 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 客戶端的,請參閱新 Elasticsearch 客戶端
重大更改
包更改
所有使用或依賴於已棄用的 Elasticsearch RestHighLevelClient 的類都已移至 org.springframework.data.elasticsearch.client.erhlc 包。透過此更改,我們現在清楚地分離了使用舊的已棄用 Elasticsearch 庫的程式碼、使用新的 Elasticsearch 客戶端的程式碼以及獨立於客戶端實現的程式碼。此外,迄今為止提供的反應式實現也已移至此處,因為此實現包含從 Elasticsearch 庫複製和修改的程式碼。
如果您直接使用ElasticsearchRestTemplate而不是ElasticsearchOperations介面,則還需要調整您的匯入。
當使用NativeSearchQuery類時,您需要切換到NativeQuery類,它可以在新的 Elasticsearch 客戶端庫中獲取一個Query例項。您將在測試程式碼中找到大量示例。
轉換為 Java 17 記錄
以下類已轉換為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 應用程式上下文中可用
-
一個
RestClientbean,它是 Elasticsearch 客戶端使用的配置好的低階RestClient -
一個
ElasticsearchClientbean,這是使用RestClient的新客戶端 -
一個
ElasticsearchOperationsbean,以bean名稱elasticsearchOperations和elasticsearchTemplate可用,它使用ElasticsearchClient
響應式風格配置
要在響應式環境中使用新客戶端,唯一的區別是配置派生自的類
@Configuration
public class NewRestClientConfig extends ReactiveElasticsearchConfiguration {
@Override
public ClientConfiguration clientConfiguration() {
return ClientConfiguration.builder() //
.connectedTo("localhost:9200") //
.build();
}
}
透過此配置,以下 Bean 將在 Spring 應用程式上下文中可用
-
一個
RestClientbean,它是 Elasticsearch 客戶端使用的配置好的低階RestClient -
一個
ReactiveElasticsearchClientbean,這是使用RestClient的新響應式客戶端 -
一個
ReactiveElasticsearchOperationsbean,以 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,而該版本不存在。