Установка Sphinx для LiveStreet

Установка Sphinx для LiveStreetSphinx представляет собой отличную систему для полнотекстового поиска с учетом морфологии, наделенная высокой скоростью индексации, которую можно легко подключить к LiveStreet. Для организации поиска на сайте работающим с использованием движка LiveStreet можно задействовать плагины, но я рекомендую установить Sphinx.

Установка Sphinx для LiveStreet включает в себя два этапа:
1) установка Sphinx
2) настройка Sphinx и LiveStreet (при необходимости)

Начнем с того, что установим Sphinx по инструкции. Я уже описал установку Sphinx для CentOS и Debian:
Установка Sphinx на Debian
Установка Sphinx на CentOS 6

Если Вам необходимо установить Sphinx под каку-то другую ОС, то укажите в комментария под какую именно и я постараюсь Вам помочь.

Для CentOS и Debian создаем конфиг вот с таким содержанием:

## Конфигурационный файл Sphinx-а для индексации Живой улицы

#######################
#
# Описываем индексы
#
#######################

# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
# к базе данных сайта
source lsParentSource
{
	type		= mysql
	sql_host	= localhost
	sql_user	= root
	sql_pass	= 
	sql_db		= livestreet
	sql_port	= 3306
    	# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы 
	# операции с БД происходили не через TCP/IP стек сервера)
    	sql_sock	= /var/run/mysqld/mysqld.sock
    
    	
	mysql_connect_flags	= 32 # 32- включение сжатие при обмене данными с БД
    
	# Включам нужную кодировку соединения и выключаем кеш запросов
	sql_query_pre			= SET NAMES utf8
    	sql_query_pre			= SET SESSION query_cache_type=OFF    
}

# Источник топиков
source topicsSource : lsParentSource
{
	# запрос на получения данных топиков
	sql_query		= \
		SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
		tc.topic_text, t_fast.topic_publish \
		FROM prefix_topic as t_fast, prefix_topic_content AS tc \
		WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end

	# запрос для дробления получения топиков на неколько итераций
	sql_query_range		= SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
	
	# сколько получать объектов за итерацию
	sql_range_step		= 1000

	
	# Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
	sql_attr_bool		= topic_publish

	# Атрибут даты добавления, типа "время"
	sql_attr_timestamp	= topic_date_add

	# мульти-аттрибут "теги топика"
	sql_attr_multi	= uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag

	sql_ranged_throttle	= 0
}

# Источник комментариев
source commentsSource : lsParentSource
{
	sql_query		= \
			SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
			FROM prefix_comment \
			WHERE comment_id>=$start AND comment_id<=$end

	sql_query_range		= SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
	sql_range_step		= 5000

	sql_attr_bool		= comment_delete
	sql_attr_timestamp	= comment_date
}

#######################
#
# Описываем индексы
#
#######################

index topicsIndex
{
	# Источник, который будет хранить данный индекса
	source			= topicsSource
	path			= /var/lib/sphinxsearch/data/lstopics

	# Тип хранения аттрибутов
	docinfo			= extern

	mlock			= 0

	# Используемые морфологические движки
	morphology		= stem_enru, soundex, metaphone

	# Кодировака данных из источника	
	charset_type		= utf-8


	# Из данных источника HTML-код нужно вырезать
	html_strip				= 1
}

# Индекс комментариев
index commentsIndex
{
	source			= commentsSource
	path			= /var/lib/sphinxsearch/data/lscomments

	docinfo			= extern

	mlock			= 0

	morphology		= stem_enru, soundex, metaphone

	charset_type		= utf-8
}

#######################
#
# Настройки индексатора
#
#######################


indexer
{
	# Лимит памяти, который может использавать демон-индексатор
	mem_limit			= 32M
}

#######################
#
# Настройка демона-поисковика
#
#######################

searchd
{
        # Адрес, на котором будет прослушиваться порт
        listen                  = 127.0.0.1:3312

	# Лог-файл демона
	log					= /var/log/sphinxsearch/searchd.log

	# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
	query_log			= /var/log/sphinxsearch/query.log

	# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
	read_timeout		= 5

	# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
	max_children		= 30

	# Файл, в который сохраняется PID-процесса при запуске
	pid_file			= /var/run/sphinxsearch/searchd.pid
}
Конфигурационный файл для Windows:
## Конфигурационный файл Sphinx-а для индексации Живой улицы

#######################
#
# Описываем индексы
#
#######################

# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = root
        sql_pass        = 
        sql_db          = livestreet
        sql_port        = 3306
        # Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы 
        # операции с БД происходили не через TCP/IP стек сервера)
        sql_sock        = /var/run/mysqld/mysqld.sock
    
        
        mysql_connect_flags     = 32 # 32- включение сжатие при обмене данными с БД
    
        # Включам нужную кодировку соединения и выключаем кеш запросов
        sql_query_pre                   = SET NAMES utf8
        sql_query_pre                   = SET SESSION query_cache_type=OFF    
}

# Источник топиков
source topicsSource : lsParentSource
{
        # запрос на получения данных топиков
        sql_query               = \
                SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM prefix_topic as t_fast, prefix_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end

        # запрос для дробления получения топиков на неколько итераций
        sql_query_range         = SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
        
        # сколько получать объектов за итерацию
        sql_range_step          = 1000

        
        # Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
        sql_attr_bool           = topic_publish

        # Атрибут даты добавления, типа "время"
        sql_attr_timestamp      = topic_date_add

        # мульти-аттрибут "теги топика"
        sql_attr_multi  = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag

        sql_ranged_throttle     = 0
}

# Источник комментариев
source commentsSource : lsParentSource
{
        sql_query               = \
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_topic_comment \
                        WHERE comment_id>=$start AND comment_id<=$end

        sql_query_range         = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_topic_comment
        sql_range_step          = 5000

        sql_attr_bool           = comment_delete
        sql_attr_timestamp      = comment_date
}

#######################
#
# Описываем индексы
#
#######################

index topicsIndex
{
        # Источник, который будет хранить данный индекса
        source                  = topicsSource
        path                    = C:/server/sphinx/index/topics

        # Тип хранения аттрибутов
        docinfo                 = extern

        mlock                   = 0

        # Используемые морфологические движки
        morphology              = stem_enru, soundex, metaphone

        # Кодировака данных из источника     
        charset_type            = utf-8


        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
}

# Индекс комментариев
index commentsIndex
{
        source                  = commentsSource
        path                    = C:/server/sphinx/index/comments

        docinfo                 = extern

        mlock                   = 0

        morphology              = stem_enru, soundex, metaphone

        charset_type            = utf-8
}

#######################
#
# Настройки индексатора
#
#######################


indexer
{
        # Лимит памяти, который может использавать демон-индексатор
        mem_limit                       = 32M
}

#######################
#
# Настройка демона-поисковика
#
#######################

searchd
{
address				= 127.0.0.1
	# address				= 192.168.0.1


	# searchd TCP port number
	# mandatory, default is 3312
	port				= 3312

        # Лог-файл демона
        log                                     = C:/server/sphinx/log/searchd.log

        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = C:/server/sphinx/log/query.log

        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5

        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 30

        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = C:/server/sphinx/log/searchd.pid
}

В конфиге меняем настройки для подключения к базе данных вместо указанных в примере:

sql_host = localhost
sql_user = root
sql_pass =
sql_db = livestreet
sql_port = 3306

При необходимости заменяем префикс prefix_ на тот, который указали при установке Livestreet.

Запускаем Sphinx созданным конфигом

/usr/local/sphinx/bin/searchd --config /usr/local/sphinx/etc/sphinx.conf

Если ругается

WARNING: compat_sphinxql_magics=1 is deprecated;

то в конфиг /usr/local/sphinx/etc/sphinx.conf необходимо добавить

compat_sphinxql_magics=0

Если ругается:

WARNING: index 'topicsIndex': preload: failed to open /var/lib/sphinxsearch/data/lstopics.sph: No such file or directory; NOT SERVING

то создания индексов необходимо запустить:

indexer --all

При установке и запуске Sphinx для LiveStreet на CentOS может возникнуть вот такая проблема

ERROR: index 'topicsIndex': sql_connect: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Решается заменой в конфиге

/var/run/mysqld/mysqld.sock

на

/var/lib/mysql/mysql.sock

После того, как вы запустили Sphinx, добавьте в крон (crontab -e) две строчки:

15 */4 * * * /usr/local/sphinx/bin/indexer --rotate topicsIndex > /dev/null 2>&1
*/15 * * * * /usr/local/sphinx/bin/indexer --rotate commentsIndex > /dev/null 2>&1

для того, что бы Сфинкс производил создание индексов топиков каждые 4 часа, а комментариев каждые 15 минут. Комментарии можно индексировать либо чаще, либо реже. Все зависит от активности ваших пользователей.

П.С.: Спасибо пользователю с ником ve1ikiy, за ссылку на меня. Если возникли проблемы с установкой, то задавайте вопросы в комментариях, а я помогу вам разобраться.

2 комментария

  1. Для WordPress существует плагин WordPress Sphinx Search Plugin, который позволяет связать эту CMS и Sphinx.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *