0

Web アプリケーションで 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 に答える