我正在尝试更新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()功能。
对此有任何帮助,我会非常感激,因为此刻它真的搞乱了我的搜索。
谢谢,
捐赠
答案 0 :(得分:0)
我会尝试两件事来调试它:
总的来说,改变tf()函数似乎是正确的做法。如果你只想要一个相对的订单而不关心绝对分数。