第18章 オブジェクトのアノテーション付けおよびクエリー
18.1. オブジェクトのアノテーション付けおよびクエリー
インデックス化が有効になったら、Red Hat JBoss Data Grid に保存されたカスタムオブジェクトに適切なアノテーションを割り当てる必要があります。
基本的な要件として、インデックス化されるすべてのオブジェクトに以下のアノテーションを付ける必要があります。
-
@Indexed
さらに、検索されるオブジェクト内のすべてのフィールドに @Field アノテーションを付ける必要があります。
@Field アノテーションをオブジェクトに追加
@Indexed
public class Person implements Serializable {
@Field(store = Store.YES)
private String name;
@Field(store = Store.YES)
private String description;
@Field(store = Store.YES)
private int age;
}
その他のアノテーションおよびオプションについては、「ドメインオブジェクトのインデックス構造へのマッピング」を参照してください。
JBoss EAP モジュールを JBoss Data Grid と使用し、ドメインモデルをモジュールとして使用する場合、スロット 7.2 の org.infinispan.query 依存関係を module.xml ファイルに追加します。org.infinispan.query 依存関係がないと、カスタムアノテーションはクエリーによって取得されず、エラーが発生します。
18.2. アノテーションによるトランスフォーマーの登録
各値のキーもインデックス化する必要があり、キーインスタンスを文字列に変換する必要があります。
Red Hat JBoss Data Grid には共通のプリミティブをエンコードするためにデフォルトのトランスメーションルーティングが一部含まれていますが、カスタムキーを使用するには org.infinispan.query.Transformer の実装を提供する必要があります。
以下の例は、org.infinispan.query.Transformer を使用してキータイプにアノテーションを付ける方法を示しています。
キータイプのアノテーション付け
@Transformable(transformer = CustomTransformer.class)
public class CustomKey {
}
public class CustomTransformer implements Transformer {
@Override
public Object fromString(String s) {
return new CustomKey(...);
}
@Override
public String toString(Object customType) {
CustomKey ck = (CustomKey) customType;
return ck.toString();
}
}
2 つのメソッドは 1 対 1 の対応関係 (Biunique correspondence) を実装する必要があります。
たとえば、オブジェクト A は以下が true である必要があります。
1 対 1 の対応関係 (Biunique correspondence)
A.equals(transformer.fromString(transformer.toString(A));
これは、トランスフォーマーはタイプ A のオブジェクトの適切なトランスフォーマー実装であることを前提とします。
18.3. クエリーの例
以下は、Red Hat JBoss Data Grid でクエリーを設定および実行する方法の例になります。
この例では、Person オブジェクトは以下を使用してアノテーションが付けられています。
Person オブジェクトのアノテーション付け
@Indexed
public class Person implements Serializable {
@Field(store = Store.YES)
private String name;
@Field
private String description;
@Field(store = Store.YES)
private int age;
}
複数の Person オブジェクトが JBoss Data Grid に保存されていることを前提とした場合、クエリーを使用してこれらのオブジェクトを検索できます。以下のコードは SearchManager および QueryBuilder インスタンスを作成します。
SearchManager および QueryBuilder の作成
SearchManager manager = Search.getSearchManager(cache);
QueryBuilder builder = manager.buildQueryBuilderForClass(Person.class) .get();
Query luceneQuery = builder.keyword()
.onField("name")
.matching("FirstName")
.createQuery();
The SearchManager および QueryBuilder は Lucene クエリーの構築に使用されます。Lucene クエリーは CacheQuery インスタンスを取得するために SearchManager に渡されます。
クエリーの実行
CacheQuery query = manager.getQuery(luceneQuery);
List<Object> results = query.list();
for (Object result : results) {
System.out.println("Found " + result);
}
この CacheQuery インスタンスにはクエリーの結果が含まれ、リストの作成やクエリーの繰り返しに使用できます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.