從 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 客戶端

移除已棄用的程式碼

DateFormat.noneDateFormat.custom自 4.2 版以來已被棄用並已移除。

自 4.2 版以來已棄用的@Document屬性已被移除。請改用@Settings註解。

@DynamicMapping@DynamicMappingValue已被移除。請改用@Document.dynamic@Field.dynamic

重大更改

移除已棄用的呼叫

操作介面中的建議呼叫已被移除

SearchOperationsReactiveSearchOperations都曾有使用 Elasticsearch 類作為引數的已棄用呼叫。這些呼叫現已移除,因此這些 API 中對 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.HttpHeadersaddAll()方法。

新的 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名稱elasticsearchOperationselasticsearchTemplate可用,它使用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 名稱reactiveElasticsearchOperationsreactiveElasticsearchTemplate可用,它使用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,而該版本不存在。

© . This site is unofficial and not affiliated with VMware.