1
我正在嘗試更新我的Lucene索引內文檔術語的搜索。目前搜索得分是該詞在文檔中出現的次數。我想要做的是評分,如果該術語存在,而不是該術語存在的次數。因此,一個包含該術語的文檔與一個包含100個術語的文檔的評分一樣。Zend_Search_Lucene更改術語頻率問題
我試圖擴展Zend_Search_Lucene_Search_Similarity與我自己的類,但老實說,我不知道這是否工作正常,因爲分數仍然很低。
class MySimilarity extends Zend_Search_Lucene_Search_Similarity{
//override the default frequency of searching
public function tf($freq){
return 1.0;
}
public function lengthNorm($fieldName, $numTerms) {
return 1.0/sqrt($numTerms);
}
public function queryNorm($sumOfSquaredWeights) {
return 1.0/sqrt($sumOfSquaredWeights);
}
public function sloppyFreq($distance) {
return 1.0;
}
public function idfFreq($docFreq, $numDocs) {
return log($numDocs/(float)($docFreq+1)) + 1.0;
}
public function coord($overlap, $maxOverlap) {
return $overlap/(float)$maxOverlap;
}
}
現在,這是從搜索良好的舊谷歌時發現的例子。然而,我所做的唯一真正的改變是tf()函數。
任何與此有關的幫助,我會非常好,因爲目前它真的搞亂了我的搜索。
感謝,
格蘭特
獲得絕對分數的最佳方法是什麼?會是idfFreq()嗎?謝謝,格蘭特 – 2010-07-21 18:50:21
爲什麼你需要絕對的分數? 我建議你閱讀http://lucene.apache.org/java/2_4_0/scoring.html 和 http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity .html Java Lucene有一個方便的explain()函數,它描述了文檔爲什麼得到它的分數。我在Zend找不到一個,但你可能有更好的運氣。 無論如何,對於搜索,你只需要正確的文件順序,因此相對得分是重要的。 – 2010-07-22 07:03:49
感謝尤瓦爾,那些文件指出我正確的方向。 – 2010-07-22 21:35:20