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 を返す必要があります。