從 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 版本以來已被棄用,現已移除。

@Document 中自 4.2 版本以來已被棄用的屬性現已移除。請使用 @Settings 註解替代。

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

破壞性變更

移除已棄用的呼叫

操作介面中的 suggest 呼叫已移除

SearchOperationsReactiveSearchOperations 都有使用 Elasticsearch 類作為引數的已棄用呼叫。這些呼叫現已移除,因此這些 API 對 Elasticsearch 類的依賴已被清除。

包變更

所有使用或依賴於已棄用的 Elasticsearch RestHighLevelClient 的類都已移至 org.springframework.data.elasticsearch.client.erhlc 包。透過這一變更,我們現在清晰地分離了使用舊的已棄用 Elasticsearch 庫的程式碼、使用新的 Elasticsearch 客戶端的程式碼以及不依賴於特定客戶端實現的程式碼。此外,此前提供的響應式實現也已移至此處,因為該實現包含從 Elasticsearch 庫複製和修改的程式碼。

如果您直接使用 ElasticsearchRestTemplate 而非 ElasticsearchOperations 介面,則還需要調整您的匯入。

使用 NativeSearchQuery 類時,您需要切換到 NativeQuery 類,該類可以接受來自新的 Elasticsearch 客戶端庫的 Query 例項。您可以在測試程式碼中找到大量示例。

轉換為 Java 17 Record

以下類已轉換為 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,而該版本不存在。