Модуль поиска на основе Zend Lucene

Использование:

  • Открыть файл /protected/config/modules/zendsearch.php
  • В нем есть описание переменной searchModels:

 [
        'class' => 'application.modules.zendsearch.ZendSearchModule',
        'searchModels' => [
            'News' => [
                'path' => 'application.modules.news.models.News',
                'module' => 'news',
                'titleColumn' => 'title',
                'linkColumn' => 'slug',
                'linkPattern' => '/news/news/view?slug={slug}',
                'textColumns' => 'full_text,short_text,keywords,description,slug',
                'criteria' => [
                    'condition' => 'status = :status',
                    'params' => [
                        ':status' => 1
                    ],
                ],
            ],
            'Page' => [
                'path' => 'application.modules.page.models.Page',
                'module' => 'page',
                'titleColumn' => 'title',
                'linkColumn' => 'slug',
                'linkPattern' => '/page/page/view?slug={slug}',
                'textColumns' => 'body,title_short,keywords,description,slug',
                'criteria' => [
                    'condition' => 'status = :status',
                    'params' => [
                        ':status' => 1
                    ],
                ],
            ],
            'Blog' => [
                'path' => 'application.modules.blog.models.Blog',
                'module' => 'blog',
                'titleColumn' => 'name',
                'linkColumn' => 'slug',
                'linkPattern' => '/blog/blog/view?slug={slug}',
                'textColumns' => 'name,description,slug',
                'criteria' => [
                    'condition' => 'status = :status',
                    'params' => [
                        ':status' => 1
                    ],
                ],
            ],
            'Post' => [
                'path' => 'application.modules.blog.models.Post',
                'module' => 'blog',
                'titleColumn' => 'title',
                'linkColumn' => 'slug',
                'linkPattern' => '/blog/post/view?slug={slug}',
                'textColumns' => 'title,quote,content,slug',
                'criteria' => [
                    'condition' => 'status = :status',
                    'params' => [
                        ':status' => 1
                    ],
                ],
            ],
            'Product' => [
                'path' => 'application.modules.store.models.Product',
                'module' => 'store',
                'titleColumn' => 'name',
                'linkColumn' => 'slug',
                'linkPattern' => '/store/product/view?slug={slug}',
                'textColumns' => 'name,sku,slug,description,meta_title,meta_description,meta_keywords',
                'criteria' => [
                    'condition' => 'status = :status',
                    'params' => [
                        ':status' => 1
                    ],
                ],
            ],
        ],
    ],
    'import' => [
        'application.modules.zendsearch.models.*',
    ],
    'component' => [],
    'rules' => [
        '/search' => 'zendsearch/search/search',
    ],
];

Это описание моделей, которые нужно включить в индекс:

  • Page - название модели со следующими параметрами:
  • path - алиас пути до модели (для уточнения где лежит эта модель)
  • titleColumn - заголовок, который будет выводиться в списке результатов поиска
  • linkColumn - поле таблицы, где хранится ссылка на модель
  • linkPattern - паттерн ссылки на страницу модели
  • textColumns - здесь через запятую нужно перечислить все поля таблицы, которые нужно загнать в индекс Важно! первым нужно указать поле, которое будет выводиться в качестве сниппета для страниц результатов поиска (сниппет формируется путем обрезки текста до 600 знаков, правильнее вывести это значение в свойства модуля, но руки не дошли до этого)
  • criteria - Условия фильтрации моделей для индексации

Далее перейти на страницу модуля http://site.ru/zendsearch/default/index и обновить индекс поиска. Индекс поиска по умолчанию хранится в папке /protected/runtime/search

После этого можно добавлять виджет формы поиска на страницы сайта:


    $this->widget('application.modules.zendsearch.widgets.SearchBlockWidget');

Придем на помощь!

Если Вам необходима интеграция полнотекстового поиска и/или фасетов (ElasticSearch или Sphinx) - мы можем это сделать для Вас! Напишите нам!