Yii2 Advanced шаблон, делаем поиск Sphinx на своем сайте.
Решил я прикрутить удобный поиск по своему блогу на шаблоне Advanced от Yii2. Официальная документация Yii2 советует Sphinx.
Начнем установку:
- Устанавливаем сам Sphinx. Открываем Installation, в инструкции всего одна команда:
php composer.phar require --prefer-dist yiisoft/yii2-sphinx
- Выполним ее на нашем сервере Бегета, в терминале, в папке нашего проекта.
Установка прошла успешно. - Настраиваем компонент поиска в конфигурации приложения. Мне нужен поиск только в frontend окружении, поэтому настраиваю конфигурацию только для него, в файле конфигурации:
/frontend/config/main.php
.return [ //.... 'components' => [ 'sphinx' => [ 'class' => 'yii\sphinx\Connection', 'dsn' => 'mysql:host=127.0.0.1;port=9306;', 'username' => '', 'password' => '', ], ], ];
- Дальше начинается самое интересное. В Бегете поиск Sphinx платный. Переходим в сервисы и включаем его:
- Дальше нужно настроить конфиг Sphinx:
source blog { type = mysql sql_host = localhost sql_user = ***** sql_pass = ***** sql_db = ***** sql_port = 9306 sql_query_pre = SET NAMES utf8 # запрос, индексирует нужные данные из БД sql_query = SELECT id, title, anons, full_text FROM post sql_attr_uint = id # поля, которые будем возврщать вместе с id sql_field_string = title sql_field_string = anons sql_field_string = full_text } index idx_post { source = blog path = /var/lib/sphinx/data/idx_post morphology = stem_enru min_word_len = 2 index_exact_words = 1 expand_keywords = 1 html_strip = 1 min_infix_len = 2 } indexer { mem_limit = 240M } searchd { log = /var/log/sphinx/searchd.log query_log = /var/log/sphinx/query.log listen = 9312 listen = 9306:mysql41 pid_file = /var/run/sphinx/searchd.pid }
- Нужно создать индекс и включить поисковывй сервер:
- После этого поиск с подсветкой запроса можно делать так:
$sql = "SELECT `id`, `title`, `anons`, `full_text`," . " SNIPPET(title, :q) as _title," . " SNIPPET(anons, :q) as _anons," . " SNIPPET(full_text, :q) AS _full_text" . " FROM `idx_post` WHERE MATCH(:q)"; $rows = Yii::$app->sphinx->createCommand($sql) ->bindValue('q', Yii::$app->sphinx->escapeMatchValue('Устанавливаем сам Sphinx')) ->queryAll();
- Или, если не нужна подсветка так:
use yii\sphinx\Query; $query = new Query(); $rows = $query->from('idx_post') ->match('поиск Sphinx') ->all();
Комментарии
Добавить комментарий