我正在努力研究如何提高 solr 搜索结果的评分。我的应用程序需要从 solr 结果中获取分数,并根据结果对查询的好坏显示一些“星”。5 颗星 = 几乎/精确到 0 颗星,表示与搜索不匹配,例如只有一个元素命中。但是,我得到的分数从 1.4 到 0.8660254 都返回了我会给 5 星的结果。我需要做的是以某种方式将这些结果转换为百分比,以便我可以用正确的星数标记这些结果。
我运行的给我 1.4 分的查询是:
euallowed:true AND(等级:"2:1")
给我 0.8660254 分数的查询是:
euallowed:真 AND(等级:“2:1”或等级:“1st”)
我已经更新了相似度,以便 tf 和 idf 返回 1.0,因为我只对文档有术语感兴趣,而不是文档中该术语的数量。这就是我的相似代码的样子:
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;
}
}
所以我想我的问题是:
标准化分数的最佳方法是如何计算出要给多少“星”?
是否有另一种方法对结果进行评分?
谢谢
授予