1

私がやりたいことは、返された結果を特定の 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 で結果をフィルタリングしたい場合、Zend の ->find() コマンドを使用してどのように行うのでしょうか?

$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 に基づいた結果のみを返すことを望みます。

4

1 に答える 1

0

索引付けされていない用語 (type_id など) は検索できません。フィールドを検索可能にするが、トークン化しないようにする場合は、キーワードとして追加します。

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

マニュアルから:

UnIndexed フィールドは検索できませんが、検索ヒットで返されます。データベースのタイムスタンプ、主キー、ファイル システム パス、およびその他の外部識別子は、UnIndexed フィールドの候補として適しています。

于 2011-03-30T10:26:51.533 に答える