Настройки SphinxSearch 2.0.4 поставленного в Ubuntu 12.04 командой apt-get
Я ставил Sphinx на Ubuntu 12.04. Использую облачный сервер Selectel, поэтому все операции выполнялись под root.
- В Ubuntu SphinxSearch 2.0.4 ставится простой командой
apt-get install sphinxsearch
- Правим файл /etc/default/sphinxsearch и ставим START=yes
- Создаем файл /etc/sphinxsearch/sphinx.conf
Я изначально взял отсюда: Sphinx. Установка и первичная настройка, и поправил пути, а также заменил deprecated address на listen.
Также оказалось что таблица topic_comment теперь называется comment, поправил это тоже.
## Конфигурационный файл 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 }
- Правим настройки для соединения с базой
source lsParentSource { type = mysql sql_host = localhost sql_user = root sql_pass = sql_db = livestreet sql_port = 3306
- Правим префикс таблиц. В моем случае я заменил все вхождения prefix_ на пустоту. (6 замен)
- Индексацию будем делать под пользователем sphinxsearch, для этого надо ему выставить /bin/sh в виде шелла
chsh -s /bin/sh sphinxsearch
- Запускаем индексацию из-под юзера sphinxsearch
su sphinxsearch -c 'indexer --all'
Индерксатор не должен выдавать ошибок, и должны появиться файлы индексов в папке /var/lib/sphinxsearch/data/
- Запускаем искалку
service sphinxsearch start
- Проверяем, что поиск работает. У меня заработал.
- Ставим переиндексацию на крон. Для этого редактируем кронтаб для пользователя sphinxsearch
su sphinxsearch -c 'crontab -e'
Выбираем редактор и вводим такие таски
12 */3 * * * indexer --rotate topicsIndex > /dev/null 2>&1 */50 * * * * indexer --rotate commentsIndex > /dev/null 2>&1
В последнее время стало очень просто купить женское нижнее белье в интернет магазине. Не выходя из дома — это очень удобно!
10 комментариев
Но почему-то не находится мой топ через поиск по Sphinx на первых страницах (http://livestreet.ru/blog/dev_documentation/13482.html). А жаль. Я скромно считаю, что на данный момент он лучший по теме :)
Касательно пакетов — у меня принцип — ставить апт-гетом дефолтные версии и не забивать голову. Регулярно приходится настраивать впс-ки под разные нужды, и есть желание тратить минимум времени на это.