Эта заметка будет посвящена очень классному поисковому движку Sphinx. Рассказывать о его прелестях можно долго, но об это уже многое написано в интернете. У нас же сейчас задача его поставить на Debian 7. Это очень легко и комментировать особо нечего, поехали…
Устанавливаем:
# aptitude install sphinxsearch
Создаем файл конфигов:
# nano /etc/sphinxsearch/sphinx.conf
Содержание файла можно взять с примера /etc/sphinxsearch/sphinx.conf.sample и подправить под себя. Там есть и комментарии, и настройки, которых в моем примере нет.
Мой же файл выглядит приблизительно вот так (заточен под движок TorrentPier II):
source torrentpier { type = mysql sql_host = localhost sql_user = user sql_pass = pass sql_db = dbname sql_query_pre = SET NAMES utf8 sql_query_pre = SET CHARACTER_SET_RESULTS=utf8 sql_query_pre = SET CHARACTER_SET_CLIENT=utf8 } source topics: torrentpier { sql_query = \ SELECT topic_id, forum_id, topic_title \ FROM bb_topics \ WHERE topic_id BETWEEN $start AND $end sql_query_range = SELECT MIN(topic_id), MAX(topic_id) FROM bb_topics sql_range_step = 100000 sql_attr_uint = forum_id sql_ranged_throttle = 50 sql_query_info = SELECT * FROM bb_topics WHERE topic_id = $id } source posts: torrentpier { sql_query = \ SELECT pt.post_id, pt.post_text, t.topic_title, t.topic_id, t.forum_id \ FROM bb_posts_text pt \ LEFT JOIN bb_topics t on pt.post_id = t.topic_first_post_id \ WHERE pt.post_id BETWEEN $start AND $end sql_query_range = SELECT MIN(post_id), MAX(post_id) FROM bb_posts_text sql_range_step = 100000 sql_attr_uint = topic_id sql_attr_uint = forum_id sql_ranged_throttle = 50 sql_query_info = SELECT * FROM bb_posts_text WHERE post_id = $id } source users: torrentpier { sql_query = \ SELECT user_id, username \ FROM bb_users \ WHERE user_id BETWEEN $start AND $end sql_query_range = SELECT 1, MAX(user_id) FROM bb_users sql_range_step = 1000 sql_query_info = SELECT * FROM bb_users WHERE user_id = $id } index topics { docinfo = extern morphology = stem_enru charset_type = utf-8 charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42C->U+430..U+44C, U+42E..U+42F->U+44E..U+44F, U+430..U+44C, U+44E..U+44F, U+0401->U+0435, U+0451->U+0435, U+042D->U+0435, U+044D->U+0435 min_prefix_len = 0 min_infix_len = 0 min_word_len = 1 min_stemming_len = 4 enable_star = 1 phrase_boundary = :, - , . , $ phrase_boundary_step = 1 html_strip = 1 path = /home/sitename/sphinx/data/topics source = topics } index posts: topics { path = /home/sitename/sphinx/data/posts source = posts } index users: topics { path = /home/sitename/sphinx/data/users source = users } indexer { mem_limit = 256M } searchd { listen = 127.0.0.1:9312 log = /home/sitename/sphinx/log/searchd.log query_log = /home/sitename/sphinx/log/query.log read_timeout = 5 max_children = 50 max_matches = 5000 seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 pid_file = /home/sitename/sphinx/log/searchd.pid }
Когда у нас есть готовый конфиг и мы готовы стартовать, нужно перед этим поправить еще один файл. Включим автозапуск.
# nano /etc/default/sphinxsearch
Выставляем START=yes
Запускаем сфинкса:
# service sphinxsearch start
Если вносились в конфиг изменения, то нужно ребутнуть сервис:
# service sphinxsearch reload
или
# service sphinxsearch restart
Считаю, что reload лучше, ибо в отличие от restart сервис не выключается, а только проверяет новые конфиги. Если в конфигах ошибка, то сервис продолжит работать на старых настройках, но укажет об ошибке. А вот restart сначала «тушит» сервис, а потом запускает его заново, тоесть в случае ошибки в конфигах сервис просто не стартанет.
Теперь финишная прямая — индексация. Напишу несколько вариантов, думаю понятно для чего каждый.
Полная (пере)индексация:
# indexer --config /etc/sphinxsearch/sphinx.conf --all
Чтобы не переиндексировать каждый раз с нуля нужно использовать —rotate. В таком случае в существующий индекс будет просто добавляться новая инфа.
# indexer --config /etc/sphinxsearch/sphinx.conf --rotate
Для автоматической индексации дописываем строку в кронтаб (пример с запуском каждых 5 минут и индексацией всего сайта):
#nano /etc/crontab
*/5 * * * * root indexer --rotate --all > /dev/null 2>&1
Ну вот и всё. Дальше дело за техникой приема инфы 🙂
27 апреля, 2014 at 10:14 пп
[…] Так же не забываем добавить в крон. Еще немного инфы по sphinx можно посмотреть в статье Установка Sphinx на Debian 7 (Wheezy). […]
22 июля, 2015 at 11:38 пп
Кратко и лаконично, все по делу, если забыл пару команд, самое-то подсмотреть, спасибо.