Проблем с ползването на zend lucene search в Yii

Здравейте,

Използвам следната търсачка …adding-search-to-yii… и всичко е наред стига само да се търси на латиница. При търсене на кирилица идват проблемите, докарах до едно положение, но резултатите продължават да излизат на маймуница. Ето и кода:

Котролата:




public function actionCreate()

{ 

$index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles), true);

         

$messages = Messages::model()->findAll();

foreach($messages as $message){

    $mes = new Zend_Search_Lucene_Document();                

    $mes->addField(Zend_Search_Lucene_Field::Text('title',CHtml::encode($message->title), 'utf-8'));      

    $mes->addField(Zend_Search_Lucene_Field::Text('content',CHtml::encode($message->content), 'utf-8')); 

    $mes->addField(Zend_Search_Lucene_Field::Text('link',CHtml::encode($message->link), 'utf-8'));                

    $index->addDocument($mes);

}

$index->commit();

}




public function actionSearch()

{

 Zend_Search_Lucene_Analysis_Analyzer::setDefault(newZend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive ());

  $this->layout='column2';

  if (($term = Yii::app()->getRequest()->getParam('q', null)) !== null){

            $this->actionCreate();

            $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles));

            

            $query = Zend_Search_Lucene_Search_QueryParser::parse($term, 'utf-8');

            $results = $index->find($query);

             

            $dataProvider = new CArrayDataProvider($results, array(

                'pagination'=>array(

                'pageSize'=>3,

                ),

            ));      

            

            $this->render('search', array('dataProvider'=>$dataProvider, 'query'=>$query, 'results'=>$results, 'term'=>$term));

  }

}



И view:

search.php




<h3>Search Results for: "<?php echo CHtml::encode($term); ?>"</h3>

            

<?php

    $this->widget('zii.widgets.CListView', array(

      'dataProvider'=>$dataProvider,

       'itemView'=>'_view',

       'viewData'=>array('query'=>$query),           

    ));

?> 



_view.php




<?php if (!empty($data)): ?>                 

       <p><strong>Title:</strong> <?php echo $query->highlightMatches(CHtml::encode($data->title)); ?></p>

        <?php //echo CHtml::link('Read', array('view', 'id'=>$data->id)); ?>                 

        <p><strong>Link: </strong><?php echo CHtml::link(CHtml::encode($data->link), CHtml::encode($data->link), array('target'=>'_blank')) ?></p>                  

        <p><strong>Content:</strong> <?php echo $query->highlightMatches(CHtml::encode($data->content)); ?></p>

         <hr/>

<?php else: ?>

        <p class="error">No results matched your search terms.</p>

<?php endif; ?>



Намира търсената дума, прави се съответствието, но ето как изкарва резултата:

подготвени професионалисти РІ областта РЅР° …

Ще съм много благодарен, ако някой може да помогне.

Благодаря предварително.

Поздрави,

Гого

Като за начало, искам да се извиня за късния отговор.

Zend Lucene прави проблем при използването му под Windows. Така, че провери дали същия проблем ще излиза и на Linux дистрибуция. Като цяло имат фиксове за работа с UTF-8 (при запазване на документ трябва да се покаже, че трябва да се запази UTF-8, същото и при търсенето на документи).

Един бърз пример


$doc->addField(Zend_Search_Lucene_Field::Text('lucene_DB_CLOUMN_NAME',utf8_decode($db_apater_result['DB_CLOUMN_NAME']),'UTF-8'));

Ако още не си оправил проблема, мога да ти препоръчам да инсталираш sphinxsearch . Като представяне е нива над Zend Lucene, единствения недостатък е, че е сървър (не става от share host)…