14.2.2.2. 動的インデックス時間の改善
で使用される
@Boost
アノテーション「静的インデックスの時間の改善」実行時のインデックス付きエンティティーの状態に依存しない静的ブースト係数を定義します。ただし、改善要因がエンティティーの実際の状態に依存する可能性があるユースケースがあります。この場合は、@DynamicBoost
アノテーションと付随するカスタム BoostStrategy
を使用できます。
例14.18 ダイナミックブーストの例
public enum PersonType { NORMAL, VIP } @Entity @Indexed @DynamicBoost(impl = VIPBoostStrategy.class) public class Person { private PersonType type; // .... } public class VIPBoostStrategy implements BoostStrategy { public float defineBoost(Object value) { Person person = ( Person ) value; if ( person.getType().equals( PersonType.VIP ) ) { return 2.0f; } else { return 1.0f; } } }
例14.18「ダイナミックブーストの例」 では、動的ブーストは、インデックス処理時に使用される
当然ながら、エンティティーで
BoostStrategy
インターフェースの実装として VIPBoostStrategy
を指定するクラスレベルで定義されます。@DynamicBoost
は、クラスまたはフィールドレベルのいずれかで配置できます。アノテーションの配置に応じて、エンティティー全体が defineBoost
メソッドに渡されるか、アノテーションが付いたフィールド/プロパティー値のみに渡されます。渡されたオブジェクトを正しいタイプにキャストするのはユーザー自身です。この例では、VIP ユーザーのすべてのインデックス化された値が通常の人の値と同じくらい重要になります。
注記
指定された
BoostStrategy
実装は、パブリックの no-arg コンストラクターを定義する必要があります。
@Boost
と @DynamicBoost
DynamicBoost アノテーションを混在させることができます。定義されたすべてのブースター要素は累積的です。