【发布时间】:2010-07-17 10:19:14
【问题描述】:
我正在尝试更新对我的 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;
}
}
现在这是根据我在搜索良好的旧 google 时找到的示例构建的。然而,我所做的唯一真正的改变是 tf() 函数。
对此有任何帮助,我将非常感激,因为目前它真的搞砸了我的搜索。
谢谢,
授予
【问题讨论】:
标签: zend-framework lucene zend-search-lucene