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 クライアントを参照してください。
重大な変更
パッケージの変更
非推奨の 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.IndexResponseMetaDataorg.springframework.data.elasticsearch.core.ActiveShardCountorg.springframework.data.elasticsearch.support.Versionorg.springframework.data.elasticsearch.support.ScoreDocorg.springframework.data.elasticsearch.core.query.ScriptDataorg.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 を使用できるようになります。
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();
}
}この構成では、Spring アプリケーションコンテキストで次の Bean を使用できるようになります。
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 に解決され、これは存在しません。