Почему мой поиск по 2 полям в Lucene (zend) не удался? - PullRequest
2 голосов
/ 09 ноября 2010

Итак, у меня есть два поля, которые я индексирую:

| 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. Это мои данные? Это как я создаю свой запрос? Или это как я создаю свой индекс?

...