Расширение / изменение способа поиска Zend_Search_Lucene

В настоящее время я использую Zend_Search_Lucene для индексации и поиска в ряде документов, в настоящее время около 1000. Я бы хотел изменить то, как движок оценивает попадания в документ по сравнению с текущим значением по умолчанию.

Zend_Search_Lucene оценивает частоту совпадений в документе, поэтому документ, в котором есть 10 совпадений со словом PHP, будет иметь более высокий балл, чем документ с 3 совпадениями со словом PHP. . Я пытаюсь передать ряд ключевых слов и оценку в зависимости от совпадений этих ключевых слов. например

Я передаю 5 ключевых слов, например: PHP, MySQL, Javascript, HTML и CSS то ищу по индексу. Один документ имеет 3 совпадения с этими ключевыми словами, а один документ имеет все 4 совпадения, 4 совпадения имеют наивысшие оценки. Количество упоминаний этих слов в документе меня не интересует.

Теперь я бегло ознакомился с Zend_Search_Lucene_Search_Similarity, однако должен признаться, что я не уверен (или настолько умён), что знаю, как использовать это для достижения того, что мне нужно.

Возможно ли то, что я хочу сделать с помощью Lucene, или есть лучшее решение?


person Grant Collins    schedule 12.05.2010    source источник


Ответы (1)


Насколько я понял в Zend_Search_Lucene_Search_Similarity руководства, я бы начал с расширения класса подобия по умолчанию, чтобы переопределить метод tf (частота термина), чтобы он не влиял на оценку:

class MySimilarity extends Zend_Search_Lucene_Search_Similarity {    
    public function tf($freq) {
        return 1.0; // overriding default sqrt($freq);
    }
}

Таким образом, не нужно учитывать количество совпадений. Как вы думаете, этого будет достаточно?

Затем перед индексированием установите алгоритм подобия по умолчанию:

Zend_Search_Lucene_Search_Similarity::setDefault(new MySimilarity());
person nuqqsa    schedule 12.05.2010
comment
Это несколько улучшило оценку документов, но еще многое предстоит сделать, и я думаю, что этому также может помочь небольшое усиление ключевых терминов. Еще раз спасибо. - person Grant Collins; 13.05.2010