Установка Sphinx на один и более сайтов с LiveStreet

Недавно помогал установить и настроить LiveStreet на одном сайте моего хорошего знакомого. Так вот, этот самый лайвстрит использует по умолчанию в качестве поискового механизма сфинкс (Sphinks). В процессе установки самого сфинкса ни где на форумах я так и не нашел как народ ставит сфинкс на сервере где развернуто более одного сайта на лайвстрите, но вопрос такой где-то был. И решил я попробовать решить эту задачку и поделится этим решением в вами.

Не буду описывать как установить лайвстрит, там все просто, а начну я с установки сфинкса.

В этой статье я опишу как настроить сфинкса для двух сайтов с лайвстритом. По аналогии вы можете в дальнейшем настроить и для большего количества.

Приступим! На момент написания данной статьи актуальная стабильная версия сфинкса 0.9.9. Значит ее и будем ставить.

Скачиваем

wget http://sphinxsearch.com/files/sphinx-0.9.9.tar.gz

Разархивируем и переходим с папку

tar zxf sphinx-0.9.9.tar.gz

sphinx-0.9.9

Устанавливаем

./configure

make

make install

Ну вот а теперь начинается основное колдунство.

Для удобства и разделения конфигов сделаем так. Создадим два разных конфига для сфинкса у друх разных пользователей

Первый

mkdir /var/www/user1/data/sphinx/domain_zone

mkdir /var/www/user1/data/sphinx/domain_zone/data

mkdir /var/www/user1/data/sphinx/domain_zone/logs

chmod 0777 /var/www/user1/data/sphinx/domain_zone

chmod 0777 /var/www/user1/data/sphinx/domain_zone/data

chmod 0777 /var/www/user1/data/sphinx/domain_zone/logs

nano /var/www/user1/data/sphinx/domain_zone/sphinx.conf

И вот такое содержимое файла конфига


#######################
# Описываем индексы
#######################
# Источник-родитель для всех остальных источников.
# Здесь указываются параметры доступа к базе данных сайта
source ParentSource
{
type = mysql
sql_host = localhost
sql_user = db user # имя пользователя базы данных
sql_pass = password # пароль пользователя базы данных
sql_db = db name # имя базы данных
sql_port = 3306
# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
# операции с БД происходили не через TCP/IP стек сервера)
sql_sock = /var/run/mysqld/mysqld.sock
# 32- включение сжатие при обмене данными с БД
mysql_connect_flags = 32
# Включаем нужную кодировку соединения и выключаем кеш запросов
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
# Источник топиков
# Важно! Заменить ниже в запросах prefix на префикс таблиц в вашей базе
source topicsSource : ParentSource
{
# запрос на получения данных топиков
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
}
# Источник комментариев
# Важно! Заменить ниже в запросах prefix на префикс таблиц в вашей базе
source commentsSource : ParentSource {
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/www/user1/data/sphinx/domain_zone/data/topicIndex
# Тип хранения атрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировка данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /var/www/user1/data/sphinx/domain_zone/data/commensSource
docinfo = extern
mlock = 0
morphology = stem_enru, soundex, metaphone
charset_type= utf-8
}
#######################
# Настройки индексатора
#######################
indexer
{
# Лимит памяти, который может использавать демон-индексатор
mem_limit = 32M
}
#######################
# Настройка демона-поисковика
#######################
searchd
{
# Адрес, на котором будет прослушиваться порт
#address = 127.0.0.1
listen = 127.0.0.1:9312
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = /var/www/user1/data/sphinx/domain_zone/logs/searchd.log
# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
query_log = /var/www/user1/data/sphinx/domain_zone/logs/query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/www/user1/data/sphinx/domain_zone/searchd.pid
}

Второй

mkdir /var/www/user2/data/sphinx/domain_zone

mkdir /var/www/user2/data/sphinx/domain_zone/data

mkdir /var/www/user2/data/sphinx/domain_zone/logs

chmod 0777 /var/www/user2/data/sphinx/domain_zone

chmod 0777 /var/www/user2/data/sphinx/domain_zone/data

chmod 0777 /var/www/user2/data/sphinx/domain_zone/logs

nano /var/www/user2/data/sphinx/domain_zone/sphinx.conf

И вот такое содержимое файла конфига


#######################
# Описываем индексы
#######################
# Источник-родитель для всех остальных источников.
# Здесь указываются параметры доступа к базе данных сайта
source ParentSource
{
type = mysql
sql_host = localhost
sql_user = db user # имя пользователя базы данных
sql_pass = password # пароль пользователя базы данных
sql_db = db name # имя базы данных
sql_port = 3306
# Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
# операции с БД происходили не через TCP/IP стек сервера)
sql_sock = /var/run/mysqld/mysqld.sock
# 32- включение сжатие при обмене данными с БД
mysql_connect_flags = 32
# Включаем нужную кодировку соединения и выключаем кеш запросов
sql_query_pre = SET NAMES utf8
sql_query_pre = SET SESSION query_cache_type=OFF
}
# Источник топиков
# Важно! Заменить ниже в запросах prefix на префикс таблиц в вашей базе
source topicsSource : ParentSource
{
# запрос на получения данных топиков
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
}
# Источник комментариев
# Важно! Заменить ниже в запросах prefix на префикс таблиц в вашей базе
source commentsSource : ParentSource {
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/www/user2/data/sphinx/domain_zone/data/topicIndex
# Тип хранения атрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировка данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /var/www/user2/data/sphinx/domain_zone/data/commensSource
docinfo = extern
mlock = 0
morphology = stem_enru, soundex, metaphone
charset_type= utf-8
}
#######################
# Настройки индексатора
#######################
indexer
{
# Лимит памяти, который может использавать демон-индексатор
mem_limit = 32M
}
#######################
# Настройка демона-поисковика
#######################
searchd
{
# Адрес, на котором будет прослушиваться порт
#address = 127.0.0.1
listen = 127.0.0.1:9313
# Ну и собственно номер порта демона searchd
port = 3313
# Лог-файл демона
log = /var/www/user2/data/sphinx/domain_zone/logs/searchd.log
# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
query_log = /var/www/user2/data/sphinx/domain_zone/logs/query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/www/user2/data/sphinx/domain_zone/searchd.pid
}

Теперь можно запустить

/usr/local/sphinx/bin/searchd —config /var/www/user1/data/sphinx/domain_zone/sphinx.conf

/usr/local/sphinx/bin/searchd —config /var/www/user2/data/sphinx/domain_zone/sphinx.conf

Проиндексируем

/usr/local/sphinx/bin/indexer —config /var/www/user1/data/sphinx/domain_zone/sphinx.conf

/usr/local/sphinx/bin/indexer—config /var/www/user2/data/sphinx/domain_zone/sphinx.conf

Чтоб не запускать каждый раз, лучше всего поместить это в автозагрузку

nano /etc/rc.local

добавим перед «end 0» строки

/usr/local/sphinx/bin/searchd —config /var/www/user1/data/sphinx/domain_zone/sphinx.conf

/usr/local/sphinx/bin/searchd —config /var/www/user2/data/sphinx/domain_zone/sphinx.conf

а так-же повесить на крон индексацию на ваше усмотренее

вот и все.

* Копирование статьи разрешено только с письменного согласия автора.

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

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