Я работаю над приложением по адресу 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» (включая цитаты), он возвращает один результат, но не тот, который даже не имеет слова «Sheba».
Я отошел от полнотекстового поиска MySQL из-за его очевидных проблем и не смог добиться этого.
Я смотрел на метод Zend_Search_Lucene_Search_QueryParser :: parse (). Ответ лежит в этом методе?