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

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

非推奨

org.springframework.data.elasticsearch.core.ReactiveElasticsearchOperations

メソッド <T> Publisher<T> execute(ClientCallback<Publisher<T>> callback) は非推奨になりました。現在、異なるクライアントライブラリを使用する複数の実装があるため、execute メソッドは引き続き異なる実装で使用できますが、異なるクライアントに共通のコールバックインターフェースがないため、インターフェースにはこれ以上のメソッドはありません。

重大な変更

非推奨クラスの削除

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 を使用する