Zend_Search_Lucene проблема изменения частоты термина - PullRequest
1 голос
/ 17 июля 2010

Я пытаюсь обновить поиск терминов документов в моем индексе 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 () .

Любая помощь с этим, и я был бы очень рад, поскольку в настоящий момент это действительно испортило мои поиски

Спасибо,

Грант

1 Ответ

0 голосов
/ 20 июля 2010

Я бы попробовал две вещи для отладки:

  1. Создайте очень маленький индекс - два документа, по одному полю в каждом, первый со словом «лодка», а второй фраза"лодка лодка".Проверьте свой поиск по этому.
  2. Попробуйте переопределить только функцию tf ().Это изменение, которое вы хотите.Переопределение других частей, таких как норма, требует переиндексации с использованием новой функции подобия.Перед переиндексацией убедитесь, что это действительно нужно.

В целом, изменение функции tf () кажется правильным.Это при условии, что вы хотите только относительный порядок и не заботитесь об абсолютном балле.

...