Эта заметка будет посвящена очень классному поисковому движку 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 пп
Кратко и лаконично, все по делу, если забыл пару команд, самое-то подсмотреть, спасибо.