Поиск по сайту (Sphinx)
Установка Sphinx
Sphinx устанавливается через команду ниже.
sudo apt-get install sphinxsearch
Затем надо создать файл /etc/sphinxsearch/sphinx.conf.
sudo cp /etc/sphinxsearch/sphinx.conf.dist /etc/sphinxsearch/sphinx.conf
В данном файле содержатся настройки Sphinx:
source src1
{
type = mysql # Тип базы данных
sql_host = localhost
sql_user = root
sql_padd = db_pass
sql_db = table_name
sql_port = 3306
sql_query_pre = SET NAMES utf8
sql_query = SELECT id,title,content FROM post
sql_field_string = title
sql_field_string = content
}
index idx_posts
{
source = src1
}
Параметр sql_query
выберет данные, которые будут сохранены в Sphinx и по которым будет происходить поиск.
По умолчанию Sphinx возвращает только ИД записей. Указать дополнительные данные можно через параметр sql_field_{type}. На примере показаны параметры sql_field_string, которые добавляют к выводу название страниц и контент.
Также надо обратить внимание на раздел index idx_posts
. Данный индекс будет указываться для поиска данных.
Надо убедиться, что в разделе «searchd» указан параметр как на примере ниже.
searchd
{
listen = localhost:9306:mysql41
# …
}
По умолчанию Sphinx отключён. Включить его можно в файле /etc/default/sphinxsearch, указав параметр START=yes
.
Теперь Sphinx можно запустить через команду ниже.
sudo /etc/init.d/sphinxsearch start
Добавить или обновить данные в индексе можно через команду ниже:
sudo indexer --all --rotate
Данную команду рекомендуется добавить в крон и выполнять каждый час.
0 * * * * sudo indexer --all --rotate >> /dev/null 2>&1
Интеграция Sphinx с Yii 2
Сначала надо установить библиотеку «yii2-sphinx».
composer require --prefer-dist yiisoft/yii2-sphinx
И в файле config/web.php добавить следующий код:
# config/web.php return [ // … 'components' => [ 'sphinx' => [ 'class' => 'yii\sphinx\Connection', 'dsn' => 'mysql:host=127.0.0.1;port=9306;', 'username' => '', 'password' => '', ], ], ];
Поиск по сайту
Поиск происходит через метод match()
.
use yii\sphinx\Query; // … $posts = (new Query())->from('idx_posts')->match('строка для поиска')->all();
Параметр idx_posts
является индексом, который был указан в настройках Sphinx в index idx_posts
.
Если для поиска передать строку «Установка Yii», то Sphinx найдёт записи «Установка Yii», «Yii установка», «Установка и настройка Yii» и другие.
Поддержать автора