Расширение / изменение способа поиска Zend_Search_Lucene - PullRequest
0 голосов
/ 12 мая 2010

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

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

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

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

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

1 Ответ

1 голос
/ 12 мая 2010

Для того, что я понял в Zend_Search_Lucene_Search_Shoityity разделе руководства, я бы начал с расширения класса сходства по умолчанию, чтобы переопределить метод 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());
...