0

我想在我的 webapp 上做 SearchBox。我非常关注教程:SeachBox 教程,作者提到的所有内容都做了,但出现错误:

指定目录中不存在索引。

我的搜索控制器:

  <?php
class SearchController extends Controller
{
private $_indexFiles = 'runtime.search';

public function init(){
    Yii::import('application.vendors.*');
    require_once('Zend/Search/Lucene.php');
    parent::init(); 
}

/**
 * Search index creation
 */
public function actionCreate()
{
    $index = Zend_Search_Lucene::create($_indexFiles);
    $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles), true);

    $posts = News::model()->findAll();
    foreach($news as $news){
        $doc = new Zend_Search_Lucene_Document();

        $doc->addField(Zend_Search_Lucene_Field::Text('title',
                                      CHtml::encode($news->name), 'utf-8')
        );

        $doc->addField(Zend_Search_Lucene_Field::Text('link',
                                        CHtml::encode($news->url)
                                            , 'utf-8')
        );   

        $doc->addField(Zend_Search_Lucene_Field::Text('content',
                                      CHtml::encode($news->description)
                                      , 'utf-8')
        );


        $index->addDocument($doc);
    }
    $index->commit();
    echo 'Lucene index created';
}

public function actionSearch()
{
    $this->layout='column2';
     if (($term = Yii::app()->getRequest()->getParam('q', null)) !== null) {
        $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles));
        $results = $index->find($term);
        $query = Zend_Search_Lucene_Search_QueryParser::parse($term);       

        $this->render('search', compact('results', 'term', 'query'));
    }
}

}

有什么想法可以解决这个问题吗?谢谢你的帮助。

编辑:好的,解决方案很明显。没有写索引是因为它没有真正声明......

这个私有的 $_indexFiles = 'runtime.search'; 在 init 之前应该只是在 actionCreate 函数中 - 然后它就可以工作

谢谢你的帮助!

4

1 回答 1

1

你有一个错字:

$posts = News::model()->findAll();
foreach($news as $news){

应该:

$posts = News::model()->findAll();
foreach($posts as $news){
于 2013-01-15T16:55:55.697 回答