8.4. Lucene のスコア式のカスタマイズ

Lucene では、ユーザーは org.apache.lucene.search.Similarity を拡張することによりスコア式をカスタマイズできます。このクラスで定義された抽象メソッドはドキュメント d のクエリ q のスコアを計算する以下の式の係数に一致します。
score(q,d) = coord(q,d) · queryNorm(q) · ∑t in q ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d) )
係数 説明
tf(t ind) ドキュメント (d) のターム (t)のターム頻度係数。
idf(t) ドキュメントのタームの頻度を反転。
coord(q,d) 指定されたドキュメントで見付かったクエリタームの数に基づいたスコア係数。
queryNorm(q) クエリ間のスコアを比較可能にするために使用する正規化係数。
t.getBoost() フィールドブースト。
norm(t,d) いくつかの (インデックス化時間) ブーストおよび長さ係数をカプセル化。
この式を詳しく説明することはこのマニュアルの範囲外です。詳細については、Similarity の Javadoc を参照してください。
Hibernate Search は、Lucene の近似値計算を変更する 2 つの方法を提供します。最初に、プロパティ hibernate.search.similarity を使用して Similarity 実装の完全修飾クラス名を指定してデフォルトの近似値を設定できます。デフォルト値は org.apache.lucene.search.DefaultSimilarity です。また、@Similarity アノテーションを使用してクラスレベルでデフォルトの近似値をオーバーライドできます。
@Entity
@Indexed
@Similarity(impl = DummySimilarity.class)
public class Book {
   ...
}
例として、ドキュメントにタームが現れる頻度は重要でないこととします。タームが 1 つのドキュメントのスコアは、複数のタームがあるドキュメントのスコアと同じになる必要があります。この場合、メソッド tf(float freq) のカスタム実装は 1.0 を返す必要があります。