Sphinx представляет собой отличную систему для полнотекстового поиска с учетом морфологии, наделенная высокой скоростью индексации, которую можно легко подключить к 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
}
## Конфигурационный файл 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, за ссылку на меня. Если возникли проблемы с установкой, то задавайте вопросы в комментариях, а я помогу вам разобраться.
Для WordPress существует плагин WordPress Sphinx Search Plugin, который позволяет связать эту CMS и Sphinx.
в CenOS запускать так: searchd —config /etc/sphinx/sphinx.conf