4.4.x から 5.0.x へのアップグレード

このセクションでは、バージョン 4.4.x から 5.0.x への重大な変更と、削除された機能を新しく導入された機能で置き換える方法について説明します。

非推奨

カスタムトレースレベルのロギング

プロパティ logging.level.org.springframework.data.elasticsearch.client.WIRE=trace を設定してログを記録することは現在非推奨です。Elasticsearch RestClient は、tracer パッケージのログ記録レベルを「トレース」に設定することで有効にできる、より優れたソリューションを提供します。

org.springframework.data.elasticsearch.client.erhlc パッケージ

パッケージの変更を参照してください。このパッケージ内のすべてのクラスは非推奨になりました。使用するデフォルトのクライアント実装は、Elasticsearch の新しい Java クライアントに基づくものなので、新しい Elasticsearch クライアントを参照してください。

非推奨のコードの削除

DateFormat.none および DateFormat.custom はバージョン 4.2 以降非推奨となり、削除されました。

4.2 以降非推奨となった @Document のプロパティは削除されました。これらには @Settings アノテーションを使用します。

@DynamicMapping と @DynamicMappingValue は削除されました。代わりに @Document.dynamic または @Field.dynamic を使用してください。

重大な変更

非推奨の呼び出しの削除

操作インターフェースの呼び出しが削除されたことを提案する

SearchOperations と ReactiveSearchOperations の両方に、Elasticsearch クラスをパラメーターとして使用していた非推奨の呼び出しがありました。これらは削除され、これらの API の Elasticsearch クラスへの依存関係が解消されました。

パッケージの変更

非推奨の Elasticsearch RestHighLevelClient を使用しているかそれに依存しているすべてのクラスは、パッケージ org.springframework.data.elasticsearch.client.erhlc に移動されました。この変更により、古い非推奨の Elasticsearch ライブラリを使用するコード、新しい Elasticsearch クライアントを使用するコード、およびクライアント実装に依存しないコードが明確に分離されました。また、これまで提供されていたリアクティブ実装は、この実装に Elasticsearch ライブラリからコピーおよび適応されたコードが含まれているため、ここに移動されました。

ElasticsearchOperations インターフェースではなく ElasticsearchRestTemplate を直接使用している場合は、インポートも調整する必要があります。

NativeSearchQuery クラスを使用する場合は、新しい Elasticsearch クライアントライブラリから Query インスタンスを取得できる NativeQuery クラスに切り替える必要があります。テストコードには多くの例があります。

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 以外を作成する必要はなくなりました。この構成では、Spring アプリケーションコンテキストで次の Bean を使用できるようになります。

  • 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();
	}
}

この構成では、Spring アプリケーションコンテキストで次の Bean を使用できるようになります。

  • 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 に解決され、これは存在しません。