Yii2 Advanced шаблон, делаем поиск Sphinx на своем сайте.

Дата публикации: 29 May 2017, Категория: Yii2

Решил я прикрутить удобный поиск по своему блогу на шаблоне Advanced от Yii2. Официальная документация Yii2 советует Sphinx

Начнем установку:

  1. Устанавливаем сам Sphinx. Открываем Installation, в инструкции всего одна команда: php composer.phar require --prefer-dist yiisoft/yii2-sphinx
  2. Выполним ее на нашем сервере Бегета, в терминале, в папке нашего проекта.Установка sphinx на хостинг Бегета
    Установка прошла успешно.
  3. Настраиваем компонент поиска в конфигурации приложения. Мне нужен поиск только в frontend окружении, поэтому настраиваю конфигурацию только для него, в файле конфигурации: /frontend/config/main.php
    return [
        //....
        'components' => [
            'sphinx' => [
                'class' => 'yii\sphinx\Connection',
                'dsn' => 'mysql:host=127.0.0.1;port=9306;',
                'username' => '',
                'password' => '',
            ],
        ],
    ];​
  4.  Дальше начинается самое интересное. В Бегете поиск Sphinx платный. Переходим в сервисы и включаем его: Beget Sphinx
  5. Дальше нужно настроить конфиг 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
    }
    
    ​
  6. Нужно создать индекс и включить поисковывй сервер: Поисковый сервер Sphinx Бегета
  7. После этого поиск с подсветкой запроса можно делать так:
    $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();​
  8. Или, если не нужна подсветка так:
    use yii\sphinx\Query;
    
    $query = new Query();
    
    $rows = $query->from('idx_post')
    	->match('поиск Sphinx')
            ->all();​

Комментарии

No results found.

Добавить комментарий