Индексирование добавляет / изменения, не работающие с помощью Lucene в Zend Framework

StackOverflow https://stackoverflow.com/questions/4270966

Вопрос

Я довольно новых для программирования и определенно для индексации Zend / Lucene. Однако из того, что я могу сказать, мой код правильный. Я чувствую, что я могу с видом на шаг или что-то пытаться загружать изменения и добавлять в базу данных, чтобы они появлялись в поисках на моем сайте. Я не получаю никакого своего рода сообщение об ошибке, хотя. Ниже приведен код от контроллера. Я думаю, дай мне знать, если вам нужно что-нибудь еще, чтобы помочь этому смысл. Заранее спасибо за любое направление, которое вы можете дать.

class SearchController extends Zend_Controller_Action
{

  public function init()
  {
    $auth = Zend_Auth::getInstance();

    if($auth->hasIdentity()) {
      $this->view->identity = $auth->getIdentity(); 
    }
 }

 public function indexAction()
 {
    // action body
 }

 public function buildAction()
 {
    // create the index
    $index = Zend_Search_Lucene::open(APPLICATION_PATH . '/indexes');
    $page = $this->_request->getParam('page');

    // build product pages
     if ($page == 'search') {
       $mdl = new Model_Search();
       $search = $mdl->fetchAll();
       if ($search->count() > 0) {
       foreach ($search as $s) {
         $doc = new Zend_Search_Lucene_Document();
         $doc->addField(Zend_Search_Lucene_Field::unIndexed('id', $s->id));
         $doc->addField(Zend_Search_Lucene_Field::text('name', $s->name));
         $doc->addField(Zend_Search_Lucene_Field::text('uri', $s->uri));
         $doc->addField(Zend_Search_Lucene_Field::text('description', $s->description));
         $index->addDocument($doc);
        }
       }
       $index->optimize();
       $this->view->indexSize = $index->numDocs();
  } 
 }

  public function resultsAction()
  {
    if($this->_request->isPost()) {
    $keywords = $this->_request->getParam('query');
    $query = Zend_Search_Lucene_Search_QueryParser::parse($keywords);
    $index = Zend_Search_Lucene::open(APPLICATION_PATH . '/indexes');
    $hits = $index->find($query);
    $this->view->results = $hits;
    $this->view->keywords = $keywords;
  } else {
    $this->view->results = null;
  }
}

}

Это было полезно?

Решение

Индексы Lucene не будут синхронизироваться с вашей базой данных автоматически, вам также нужно восстановить весь индекс или удалить и повторно добавить соответствующие документы, когда они меняются (вы не можете редактировать существующий документ).

public function updateAction()
{
   // something made the db change
   $hits = $index->find("name: " . $name);
   foreach($hits as $hit) {
     $index->delete($hit->id)  
   }

   $doc = new Zend_Search_Lucene_Document();
   // build your doc

   $index->add($doc);

}

Обратите внимание, что документы Lucene имели свой собственный внутренний идентификационный собственность, и будьте осторожны, чтобы не принять его для того, чтобы показать, что вы предоставляете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top