4.3.x から 4.4.x へのアップグレード
このセクションでは、バージョン 4.3.x から 4.4.x への重大な変更と、削除された機能を新しく導入された機能で置き換える方法について説明します。
重大な変更
非推奨クラスの削除
org.springframework.data.elasticsearch.core.ElasticsearchTemplate
は削除されました
バージョン 4.4 Spring Data Elasticsearch では、Elasticsearch の TransportClient
は使用されなくなりました (Elasticsearch 7.0 以降、TransportClient
自体は非推奨です)。つまり、Spring Data Elasticsearch 4.0 以降非推奨となった org.springframework.data.elasticsearch.core.ElasticsearchTemplate
クラスは削除されました。これは、TransportClient
を使用していた ElasticsearchOperations
インターフェースの実装でした。Elasticsearch への接続は、命令型の ElasticsearchRestTemplate
またはリアクティブ型の ReactiveElasticsearchTemplate
を使用して行う必要があります。
パッケージの変更
4.3 では、新しい Elasticsearch クライアントの統合に備えて、2 つのクラス (ElasticsearchAggregations
と ElasticsearchAggregation
) が org.springframework.data.elasticsearch.core.clients.elasticsearch7
パッケージに移動されました。クラスは以前の Elasticsearch クライアントのまま使用されるため、org.springframework.data.elasticsearch.core
パッケージに戻されました。
行動の変化
ReactiveElasticsearchTemplate
は、直接または Spring Boot 構成によって作成された場合、デフォルトのリフレッシュポリシーが IMMEDIATE でした。これにより、大量のインデックス作成でパフォーマンスの問題が発生する可能性があり、Elasticsearch のデフォルトの動作とは異なっていました。これは、デフォルトのリフレッシュポリシーが NONE になるように変更されました。リアクティブ REST クライアントで説明されているような構成を使用して ReactiveElasticsearchTemplate
が提供された場合、デフォルトのリフレッシュポリシーはすでに NONE に設定されていました。
新しい Elasticsearch クライアント
Elasticsearch は新しい ElasticsearchClient
を導入し、以前の RestHighLevelClient
を廃止しました。Spring Data Elasticsearch 4.4 は、次の理由により、引き続き古いクライアントをデフォルトのクライアントとして使用します。
新しいクライアントはアプリケーションに
jakarta.json.spi.JsonProvider
パッケージの使用を強制しますが、Spring Boot はバージョン 3 まではjavax.json.spi.JsonProvider
を使用します。そのため、Spring Data、Elasticsearch のデフォルト実装を切り替えるには、Spring Data、Elasticsearch 5 (Spring Data 3、Spring 6) のみを使用できます。Elasticsearch クライアントにはまだ解決すべきバグがいくつかある
Spring Data、Elasticsearch での新しいクライアントを使用した実装は、作業リソースが限られているため、まだ完了していません。Spring Data、Elasticsearch は一般からの貢献によって成り立つコミュニティ主導のプロジェクトであることを忘れないでください。
新しいクライアントの使用方法
新しいクライアントを使用した実装は完全ではありません。一部の操作では java.lang.UnsupportedOperationException がスローされたり、NPE がスローされたりする可能性があります (たとえば、Elasticsearch がサーバーからのレスポンスを解析できない場合、これはまだ時々発生します)。新しいクライアントを使用して実装をテストしますが、まだ本番コードでは使用しないでください。 |
新しいクライアントを試して使用するには、次の手順が必要です。
既存のデフォルトクライアントを設定しないように注意してください
Spring Boot を使用する場合は、自動構成から Spring Data Elasticsearch を除外します。
@SpringBootApplication(exclude = ElasticsearchDataAutoConfiguration.class)
public class SpringdataElasticTestApplication {
// ...
}
アプリケーション構成から Spring Data Elasticsearch 関連のプロパティを削除します。Spring Data Elasticsearch がプログラム構成を使用して構成されている場合 (Elasticsearch クライアントを参照)、これらの Bean を Spring アプリケーションコンテキストから削除します。
依存関係を追加する
新しい Elasticsearch クライアントの依存関係は、Spring Data Elasticsearch では依然としてオプションであるため、明示的に追加する必要があります。
<dependencies>
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>7.17.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId> <!-- is Apache 2-->
<version>7.17.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
Spring Boot を使用する場合は、pom.xml に以下のプロパティを設定する必要があります。
<properties>
<jakarta-json.version>2.0.1</jakarta-json.version>
</properties>
新しい構成クラス
命令型スタイル
新しいクライアントを使用するように 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
を使用する