3.2.x から 4.0.x へのアップグレード

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

使用されていた Jackson マッパーの削除

バージョン 4.0.x での変更点の 1 つは、Spring Data Elasticsearch が、エンティティを Elasticsearch に必要な JSON 表現にマッピングするために Jackson マッパーを使用しなくなったことです (Elasticsearch オブジェクトマッピングを参照)。バージョン 3.2.x では、Jackson マッパーがデフォルトで使用されていました。メタモデルベースのコンバーター (ElasticsearchEntityMapper という名前) を明示的に構成 ( メタモデルオブジェクトのマッピング ) することで、それに切り替えることができました。

バージョン 4.0.x では、メタモデルベースのコンバーターが唯一使用可能であり、明示的に構成する必要はありません。次のように Bean を提供してメタモデルコンバーターを有効にするカスタム構成がある場合:

@Bean
@Override
public EntityMapper entityMapper() {

  ElasticsearchEntityMapper entityMapper = new ElasticsearchEntityMapper(
    elasticsearchMappingContext(), new DefaultConversionService()
  );
  entityMapper.setConversions(elasticsearchCustomConversions());

  return entityMapper;
}

ElasticsearchEntityMapper インターフェースは削除されているため、この Bean を削除する必要があります。

エンティティの構成

一部のユーザーは、エンティティクラスにカスタム Jackson アノテーションを設定していました。たとえば、Elasticsearch でマップされたドキュメントのカスタム名を定義したり、日付変換を構成したりするためです。これらは考慮されなくなりました。必要な機能は現在、Spring Data Elasticsearch の @Field アノテーションで提供されています。詳細については、マッピングアノテーションの概要を参照してください。

クエリオブジェクトからの暗黙的なインデックス名の削除

3.2.x では、IndexQuery や SearchQuery などのさまざまなクエリクラスに、操作対象のインデックス名を取得するプロパティがありました。これらが設定されていない場合は、渡されたエンティティがインスペクションされて、@Document アノテーションに設定されたインデックス名が取得されます。
4.0.x では、インデックス名を型 IndexCoordinates の追加パラメーターで指定する必要があります。これを分離することにより、異なるインデックスに対して 1 つのクエリオブジェクトを使用できるようになりました。

たとえば、次のコードのようになります。

IndexQuery indexQuery = new IndexQueryBuilder()
  .withId(person.getId().toString())
  .withObject(person)
  .build();

String documentId = elasticsearchOperations.index(indexQuery);

を次のように変更する必要があります。

IndexCoordinates indexCoordinates = elasticsearchOperations.getIndexCoordinatesFor(person.getClass());

IndexQuery indexQuery = new IndexQueryBuilder()
  .withId(person.getId().toString())
  .withObject(person)
  .build();

String documentId = elasticsearchOperations.index(indexQuery, indexCoordinates);

エンティティの操作とエンティティの @Document アノテーションに含まれるインデックス名の使用を容易にするために、DocumentOperations.save(T entity) のような新しいメソッドが追加されました。

新しいオペレーションインターフェース

バージョン 3.2 には、ElasticsearchTemplate クラスのすべてのメソッドを定義する ElasticsearchOperations インターフェースがありました。バージョン 4 では、関数がさまざまなインターフェースに分割され、これらのインターフェースが Elasticsearch API と整合されました。

  • DocumentOperations は、保存や削除などのドキュメント関連の機能です。

  • SearchOperations には Elasticsearch で検索する機能が含まれています

  • IndexOperations は、インデックスの作成やマッピングの作成など、インデックスを操作する関数を定義します。

ElasticsearchOperations は DocumentOperations および SearchOperations を継承し、メソッドが IndexOperations インスタンスにアクセスできるようになりました。

バージョン 3.2 の ElasticsearchOperations インターフェースから IndexOperations インターフェースに移行されたすべての関数は引き続き使用できます。これらは非推奨としてマークされており、新しい実装に委譲するデフォルトの実装があります。
/**
 * Create an index for given indexName.
 *
 * @param indexName the name of the index
 * @return {@literal true} if the index was created
 * @deprecated since 4.0, use {@link IndexOperations#create()}
 */
@Deprecated
default boolean createIndex(String indexName) {
	return indexOps(IndexCoordinates.of(indexName)).create();
}

非推奨

メソッドとクラス

多くの関数とクラスが非推奨になりました。これらの関数は引き続き機能しますが、Javadoc には、置き換える必要があるものが示されています。

ElasticsearchOperations の例
/*
 * Retrieves an object from an index.
 *
 * @param query the query defining the id of the object to get
 * @param clazz the type of the object to be returned
 * @return the found object
 * @deprecated since 4.0, use {@link #get(String, Class, IndexCoordinates)}
 */
@Deprecated
@Nullable
<T> T queryForObject(GetQuery query, Class<T> clazz);

Elasticsearch の廃止

バージョン 7 以降、Elasticsearch TransportClient は非推奨となり、Elasticsearch バージョン 8 で削除されます。Spring Data Elasticsearch では、バージョン 4.0 で TransportClient を使用する ElasticsearchTemplate クラスが非推奨となります。

マッピング型は Elasticsearch 7 から削除されましたが、Spring Data @Document アノテーションと IndexCoordinates クラスでは非推奨の値としてまだ存在していますが、内部的には使用されなくなりました。

削除

  • すでに説明したように、ElasticsearchEntityMapper インターフェースは削除されました。

  • SearchQuery インターフェースはその基本インターフェース Query にマージされているため、その出現箇所を Query に置き換えるだけで済みます。

  • メソッド org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor<T> resultsExtractor); と org.springframework.data.elasticsearch.core.ResultsExtractor インターフェースは削除されました。これらは、Jackson ベースのマッパーで実行されたレスポンスマッピングが不十分な場合に、Elasticsearch からの結果を解析するために使用できます。バージョン 4.0 以降、Elasticsearch レスポンスから情報を返す新しい検索結果の種類があるため、この低レベルの機能を公開する必要はありません。

  • 低レベルメソッド startScrollcontinueScrollclearScroll は ElasticsearchOperations インターフェースから削除されました。低レベルのスクロール API アクセス用に、ElasticsearchRestTemplate クラスに searchScrollStartsearchScrollContinuesearchScrollClear メソッドが追加されました。