Итак, у меня есть два поля, которые я индексирую:
| NAME | TYPE |
-------------------------------------
|Texas Steak | Restaurant |
|Bone Digs Restaurant | Restaurant |
|Rain Sushi | Restaurant |
|Brazil Steakhouse | Restaurant |
|Alfredos | Restaurant |
|Mediterranean Corner | Restaurant |
|Korean Taqueria | Restaurant |
|Orlando Cantina | Restaurant |
|Boomer Bar and Grill | Restaurant |
|Top Spice | Restaurant |
|Tamarind | Restaurant |
Я индексирую следующим образом:
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive());
//let lucene search for numbers as well as words
try {
$index = Zend_Search_Lucene::create('data/');
} catch(Zend_Search_Lucene_Exception $e){
echo "Unable {$e->getMessage()}";
}
$mdlPage = new Application_Model_DbTable_Business();
$currentPages = $mdlPage->fetchAll();
if($currentPages->count() >= 0) {
foreach ($currentPages as $p) {
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::text('business_name', $p->business_name));
$doc->addField(Zend_Search_Lucene_Field::text('primary_category',$p->primary_category));
$index->addDocument($doc);
}
}
$index->commit();
$index->optimize();
$this->view->indexSize = $index->numDocs();
Теперь я запрашиваю индекс следующим образом:
$query = new Zend_Search_Lucene_Search_Query_MultiTerm();
$query->addTerm(new Zend_Search_Lucene_Index_Term($keyword,'business_name'),null);
$query->addTerm(new Zend_Search_Lucene_Index_Term($keyword,'primary_category'),null);
echo $query;
try {
$results = $index->find($query);
}
catch (Zend_Search_Lucene_Exception $e) {
echo "Unable {$e->getMessage()}";
}
Вот странная вещь. Если я запрашиваю «тайское» или любое другое слово в поле business_name, я получаю результаты. Но как только я запрашиваю «ресторан», мой экран переходит не в белый экран. Если я изменю свой код на это:
$query = new Zend_Search_Lucene_Search_Query_MultiTerm();
//$query->addTerm(new Zend_Search_Lucene_Index_Term($keyword,'business_name'),null);
$query->addTerm(new Zend_Search_Lucene_Index_Term($keyword,'primary_category'),null);
Тогда я получаю результаты. Я не понимаю, что не нравится Lucene. Это мои данные? Это как я создаю свой запрос? Или это как я создаю свой индекс?