Yii + lucene две несвязанные таблица.

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
Reinchold
Сообщения: 48
Зарегистрирован: 2013.01.17, 02:19

Yii + lucene две несвязанные таблица.

Сообщение Reinchold »

Доброго времени суток.
Есть вопрос по отношению создания индекса и его приёма.
У меня есть несколько несвязанных таблиц и хотелось бы сделать полный поиск по сайту при помощи lucene.
Всё сделал, как написано в примере по этой ссылке:
http://www.yiiframework.com/wiki/248/ad ... nd-lucene/
раотает хорошо, но как добавить в индекс для начала ещё одну таблицу в Controller/SearchController.php, а потом принять её в views/search/search.php
я пытался сделать так:
Контроллер:

Код: Выделить всё

    /**
    * Search index creation
    */
    public function actionCreate()
    {
        
        $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles), true);
 
        $posts = User::model()->findAll();
        foreach($posts as $post){
            $doc = new Zend_Search_Lucene_Document();
 
            $doc->addField(Zend_Search_Lucene_Field::Text('surname',
                                            CHtml::encode($post->surname)
                                                , 'utf-8')
            );   
 
            $doc->addField(Zend_Search_Lucene_Field::Text('name',
                                          CHtml::encode($post->name)
                                                , 'utf-8')
            );
            
            $doc->addField(Zend_Search_Lucene_Field::Text('email',
                                          CHtml::encode($post->email)
                                                , 'utf-8')
            );
 
 
            $index->addDocument($doc);
        }
        $index->commit();
        
        
        $books = Book::model()->findAll();
        
        foreach($books as $book){
            $document = new Zend_Search_Lucene_Document();
 
            $document->addField(Zend_Search_Lucene_Field::Text('shortname',
                                          CHtml::encode($book->shortname)
                                                , 'utf-8')
            );

            $index->addDocument($document);
        }
        $index->commit();
        
        echo 'Lucene index created';
    }
Вид:

Код: Выделить всё

<?php
$this->pageTitle=Yii::app()->name . ' - Search results';
$this->breadcrumbs=array(
    'Search Results',
);
?>
 
<h3>Search Results for: "<?php echo CHtml::encode($term); ?>"</h3>
<?php if (!empty($results)): ?>
                <?php foreach($results as $result): ?>
                    <p>Surname:    <?php  if(!empty($result->surname))    echo $result->surname;   ?></p>
                    <p>Book:        <?php  if(!empty($result->shortname))  echo $result->shortname; ?></p>
                    <p>E-Mail:      <?php  if(!empty($result->email))      echo $result->email;     ?></p>
                    <hr/>
                <?php endforeach; ?>
 
            <?php else: ?>
                <p class="error">No results matched your search terms.</p>
            <?php endif; ?>
у меня работает только в таком кривом варианте, но...
не выводит названия результат поиска, а только правильное колличество найденого.
К примеру, если четыре совпадения фамилии, то он выводит четыре пустых повторений.
Что не так?
Ответить