solr 検索結果のスコアリングを改善する方法を考え出そうとしています。私のアプリケーションは、solr の結果からスコアを取得し、クエリに対する結果の良さに応じて、いくつかの「星」を表示する必要があります。星 5 個 = 星 0 個までのほぼ/正確な値は、検索にあまり一致しないことを意味します。たとえば、1 つの要素しかヒットしません。しかし、私は 1.4 から 0.8660254 までのスコアを取得しており、どちらも 5 つ星を与える結果を返しています。私がする必要があるのは、これらの結果をパーセンテージに変換して、正しい数の星でこれらの結果をマークできるようにすることです.
1.4 スコアを得るために実行したクエリは次のとおりです。
euallowed:true AND(グレード:"2:1")
0.8660254 スコアを与えるクエリは次のとおりです。
euallowed:true AND(グレード:"2:1" OR グレード:"1st")
ドキュメント内の用語の数ではなく、ドキュメントに用語がある場合にのみ関心があるため、tf と idf が 1.0 を返すように、Similarity を既に更新しました。これは私の類似コードがどのように見えるかです:
import org.apache.lucene.search.Similarity;
public class StudentSearchSimilarity extends Similarity {
@Override
public float lengthNorm(String fieldName, int numTerms) {
return (float) (1.0 / Math.sqrt(numTerms));
}
@Override
public float queryNorm(float sumOfSquaredWeights) {
return (float) (1.0 / Math.sqrt(sumOfSquaredWeights));
}
@Override
public float sloppyFreq(int distance) {
return 1.0f / (distance + 1);
}
@Override
public float tf(float freq) {
return (float) 1.0;
}
@Override
public float idf(int docFreq, int numDocs) {
//return (float) (Math.log(numDocs / (double) (docFreq + 1)) + 1.0);
return (float)1.0;
}
@Override
public float coord(int overlap, int maxOverlap) {
return overlap / (float) maxOverlap;
}
}
だから私は私の質問は次のとおりだと思います:
「星」の数を計算できるように、スコアを正規化するにはどうすればよいですか?
結果を採点する別の方法はありますか?
ありがとう
許す