我正在努力解決如何改進solr搜索結果的評分。我的應用程序需要從solr結果中取得分數,並根據查詢結果的好壞來顯示一些「星號」。 5星=幾乎/精確到0星意味着與搜索不匹配,例如,只有一個元素命中。不過,我得到的分數從1.4到0.8660254都返回給我5星級的結果。我需要做的是以某種方式將這些結果轉換爲一個百分比,以便我可以用正確數量的星標記這些結果。如何規範solr/lucene分數?
,我跑這給了我1.4分的查詢是:
euallowed:true和(等級: 「2:1」)
,讓我0.8660254成績查詢是:
euallowed:true和(等級: 「2:1」 或等級: 「1」)
我已經更新了相似性,使得TF和IDF回報1.0,因爲我只INTERES如果一個文件有一個術語,而不是該文件中該術語的數量。這是我的相似度代碼是什麼樣子:
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;
}
}
,所以我想我的問題是:
如何正常化 比分的最好方法,這樣我可以計算出如何 多「星星「給予?
是否有另一種方式對 結果打分?
感謝
格蘭特
赫姆...感謝。這是一個非常好的論點,但不知道當我覆蓋tf和idf會發生什麼。我想我可能不得不以另一種方式來看待這個問題。即使這意味着不被星星「打分」。 – 2010-10-23 10:50:50