Gra*_*ins 15 lucene search solr normalization tf-idf
我正在努力研究如何提高solr搜索结果的得分.我的应用程序需要从solr结果中获取分数,并根据查询的结果有多好来显示一些"星星".5星=差不多/精确到0星,意味着不能很好地匹配搜索,例如只有一个元素命中.然而,我得到的分数从1.4到0.8660254都返回结果,我会给5星.我需要做的是以某种方式将这些结果转换为百分比,以便我可以用正确的星数来标记这些结果.
我运行的查询给出了1.4分:
euallowed:true AND(等级:"2:1")
给我0.8660254分数的查询是:
euallowed:true AND(等级:"2:1"或等级:"1st")
我已经更新了Similarity,以便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;
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是:
如何将分数标准化的最佳方法是什么,以便我可以计算出有多少"星星"给出?
还有另一种评分结果的方法吗?
谢谢
格兰特
Xod*_*rap 16
引用http://wiki.apache.org/lucene-java/ScoresAsPercentages:
人们经常想要根据Lucene得分来计算"百分比",以确定什么是"100%完美"匹配与"50%"匹配.这也是一些称为"标准化分数"的事情
不要这样做.
认真.不要试图以这种方式思考你的问题,它不会结束.
该页面确实举例说明了理论上如何做到这一点,但这很难.