フィールド値に基づいて特定のドキュメントをブーストしようとしています。通常は問題なく動作していますが、一部のドキュメントでは、ブースト値が小さいにもかかわらず、より高いスコアが返されます。
request パラメーターを使用してクエリをデバッグした後、関数が特定のドキュメントに対してより高いスコアを返してdebugQuery=on
いることに気付きました。これは全体的なスコアに影響を与えています。idf
クエリ時に tf/idf スコアリングを無視する方法はありますか?
tf メソッドと idf メソッドをオーバーライドするカスタムのSimilarityを作成し、それを DefaultSimilarity の代わりに使用します。
何かのようなもの:
class CustomSimilarity extends DefaultSimilarity {
@Override
public float tf(float freq) {
return 1.0;
}
@Override
public float tf(int freq) {
return 1.0;
}
@Override
// Note the signature of this method may now take longs:
// public float idf(long docFreq, long numDocs)
public float idf(int docFreq, int numDocs) {
return 1.0;
}
}
schema.xml でその類似性を使用するように設定します。
<similarity class="myorg.mypackage.CustomSimilarity"/>