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 には、置き換える必要があるものが示されています。
/*
* 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 レスポンスから情報を返す新しい検索結果の種類があるため、この低レベルの機能を公開する必要はありません。低レベルメソッド
startScroll
、continueScroll
、clearScroll
はElasticsearchOperations
インターフェースから削除されました。低レベルのスクロール API アクセス用に、ElasticsearchRestTemplate
クラスにsearchScrollStart
、searchScrollContinue
、searchScrollClear
メソッドが追加されました。