我对编程非常陌生,对于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索引不会自动与数据库保持同步,您需要重建整个索引,或者在相关文档更改时删除并重新添加相关文档(您无法编辑现有文档)。 通用标签

请注意,lucene文档具有自己的内部id属性,请注意不要将其误认为您提供的id关键字。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top