第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.2org.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 および QueryBuilderLucene クエリーの構築に使用されます。Lucene クエリーは CacheQuery インスタンスを取得するために SearchManager に渡されます。

クエリーの実行

CacheQuery query = manager.getQuery(luceneQuery);
List<Object> results = query.list();
for (Object result : results) {
    System.out.println("Found " + result);
}

この CacheQuery インスタンスにはクエリーの結果が含まれ、リストの作成やクエリーの繰り返しに使用できます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.