Zend_Search_Lucene, возвращает результаты на основе указанного type_id - PullRequest
1 голос
/ 15 февраля 2011

Что я хочу сделать, так это уметь фильтровать возвращаемые результаты по конкретному type_id.

Сначала я проиндексировал все статьи, которые я хочу найти.

    SELECT
        article_id, article_name, article_body, type_id
    FROM
        articles
    WHERE
        active = 1;

$this->index = Zend_Search_Lucene::create($this->directory);

    foreach ($result as $key => $value)
    {
        $this->doc = new Zend_Search_Lucene_Document();
        //Indexed
        $this->doc->addField(Zend_Search_Lucene_Field::Text('article_name',$value['article_name']));
        $this->doc->addField(Zend_Search_Lucene_Field::Text('article_body', $value['article_body']));
        //Indexed

        //Unindexd
        $this->doc->addField(Zend_Search_Lucene_Field::UnIndexed('article_id', $value['article_id']));
        $this->doc->addField(Zend_Search_Lucene_Field::UnIndexed('type_id', $value['type_id']));
        //Unindexd

        $this->index->addDocument($this->doc);
    }

    $this->index->commit();
    $this->index->optimize();

Теперь, когда я выполняю поиск, если я хочу отфильтровать результаты по type_id, как бы я это сделал, используя команду -> find () Zend?

$this->index = Zend_Search_Lucene::open($this->directory);

//Based on the type_id, I only want the indexed articles that match the type_id to be returned.
$results = $this->index->find('+type_id:2 '.$search_term.'*');

//Cycle through the results.

Я хочу, чтобы zend-search-lucene возвращал результаты только на основе указанного type_id.

1 Ответ

0 голосов
/ 30 марта 2011

Вы не можете искать неиндексированные термины (например, type_id).Если вы хотите, чтобы поле было доступным для поиска, но не маркировалось, вы должны добавить его в качестве ключевого слова:

$this->doc->addField(Zend_Search_Lucene_Field::Keyword('type_id', $value['type_id']));

Из руководства :

UnIndexedполя не доступны для поиска, но они возвращаются с поисковыми попаданиями.Метки времени базы данных, первичные ключи, пути файловой системы и другие внешние идентификаторы являются хорошими кандидатами для полей без индекса.

...