1

私はhttp://demos.zatechcorp.com/codeigniter/でアプリケーションに取り組んでいます

私のマシンで実行されている現在の化身で、ZendFramework を Codeigniter 内にロードし、次のようにインデックスを生成しました。

    // ... Some code that loads all the markets
    foreach ($markets as $market)
    {
        $doc = new Zend_Search_Lucene_Document();
        // Id for retrieval
        $doc->addField(Zend_Search_Lucene_Field::UnIndexed('id', $market->id));
        // Store document URL to identify it in search result.
        $doc->addField(Zend_Search_Lucene_Field::Text('url', $market->permalink));
        // Index document content
        $doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $market->description));
        // Title
        $doc->addField(Zend_Search_Lucene_Field::Text('title', $market->title));
        // Phone
        $doc->addField(Zend_Search_Lucene_Field::Keyword('phone', $market->phone));
        // Fax
        $doc->addField(Zend_Search_Lucene_Field::Keyword('fax', $market->fax));
        // Street
        $doc->addField(Zend_Search_Lucene_Field::Keyword('street', $market->street));
        // City
        $doc->addField(Zend_Search_Lucene_Field::Keyword('city', $market->city));
        // State
        $doc->addField(Zend_Search_Lucene_Field::Keyword('state', $market->state));
        // Zip
        $doc->addField(Zend_Search_Lucene_Field::Keyword('zip', $market->zip));
        // Type
        $doc->addField(Zend_Search_Lucene_Field::UnIndexed('type', 'market'));

        // Store Document
        $index->addDocument($doc);
    }

私の検索では、これを行います:

    $hits    = $index->find($q);

これは単純な単語で機能しますが、「Sheba Foods」(引用符を含む) のような検索を行うと、1 つの結果が返されますが、「Sheba」という単語すら含まれていない間違った結果が返されます。

明らかな問題があるため、MySQL 全文検索から離れましたが、これで前進することはできません。

その方法について調べてきましたZend_Search_Lucene_Search_QueryParser::parse()。答えはこの方法にありますか?

4

2 に答える 2

3

私はそれを考え出した。Lucene では、「id」という名前のフィールドを追加できますが、ヒットから id を取得すると、別の結果が得られます。これは、検索結果全体に含まれる検索語の id であると思います。

この場合、私がしなければならなかったことは、次のような別のフィールド名を使用することでした:

    // Id for retrieval
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('item_id', $market->id));
于 2009-03-23T23:01:56.760 に答える