我正在尝试更新对我的 Lucene 索引中文档术语的搜索。目前,搜索对术语在文档中出现的次数进行评分。如果该术语存在,我想做的是评分,而不是该术语存在的次数。因此,包含该术语的文档一次的得分与包含该术语的文档的 100 次相同。
我试图用我自己的类扩展 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()函数。
对此有任何帮助,我会非常感激,因为目前它真的弄乱了我的搜索。
谢谢,
授予