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

移除已棄用的程式碼

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

@Document 的屬性自 4.2 版本以來已被棄用,現已移除。請改用 @Settings 注釋。

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

重大變更

移除已棄用的呼叫

operations 介面中的 suggest 呼叫已移除

SearchOperationsReactiveSearchOperations 都有已棄用的呼叫,這些呼叫使用 Elasticsearch 類別作為參數。這些呼叫現在已移除,因此這些 API 中對 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.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,而此版本不存在。