Zend Framework Lucene Boole / "Google" gibi arama

2 Cevap php

I http://demos.zatechcorp.com/codeigniter/ de uygulama üzerinde çalışıyorum

Benim makine üzerinde çalışan mevcut cisimleşmiş hali olarak, ben Codeigniter içeride ZendFramework yüklendi ve bu böyle bir dizin oluşturulur:

    // ... 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);
    }

Benim arama, ben bunu:

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

Bu basit kelimelerle çalışır, ama ben "Sheba Foods" (tırnak dahil) gibi bir arama yapmak istediğinizde, bu bir sonuç verir, ama daha kelime "Sheba" yok yanlış biri.

Çünkü onun belirgin sorunlardan uzak MySQL tam metin arama taşındı, ve bu herhangi bir ilerleme yapamaz.

Ben Zend_Search_Lucene_Search_QueryParser :: parse () yöntemi bakarak oldum. Bu yöntemde cevap yalan mı?

2 Cevap

Ben bunu anladım. Lucene ile, adı 'id' ile bir alan eklemek, ama bir hit id almak farklı bir şey veriyor olabilir - Ben bu tüm arama sonuçları içinde arama teriminin kimliği olduğunu tahmin edeceksiniz.

Ben bu durumda yapmak zorunda bu gibi farklı bir alan adı kullanmak oldu:

    // Id for retrieval
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('item_id', $market->id));

Ben geçmişte MySQL tam metin arama kullanmış, ama gerçekten yoğun CPU bulunuyor.

Her zaman kolon = '% sorgusu%' FROM tablo SELECT * güvenebileceğini

:)