Я пытаюсь обновить поиск терминов документов в моем индексе Lucene.В настоящее время результаты поиска оценивают количество раз, когда термин появляется в документе.То, что я хотел бы сделать, это оценка, если термин существует, а не количество раз, которое существует.Таким образом, документ с термином в нем один раз оценивается так же, как и документ с термином в нем 100 раз.
Я пытался расширить Zend_Search_Lucene_Search_S 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 () .
Любая помощь с этим, и я был бы очень рад, поскольку в настоящий момент это действительно испортило мои поиски
Спасибо,
Грант