Intellect Board Pro
Расширяемый движок форума с разделами разных типов
Объявление
Вышла версия 3.05 с фотогалереей и поддержкой PostgreSQL и SQLite.
Перейти к скачиванию
Привет, гость!

Настройка Sphinx для морфологеского поиска

Пример файла конфигурации

Настройки отображения темы Показывать по сообщений с сортировкой .
Выводить , отправленные .
Одна страница
Распечатать
4X_Pro
Основатель проекта
Всего сообщений: 401
Зарегистрирован: 22 сент. 2014 г., 18:56
Откуда: Москва, Перово
Рейтинг пользователя: 15
. Редактировалось 1 раз, последний — #1
C версии 3.00 Intellect Board поддерживает поиск с помощью Sphinx Search с учётом словоформ. Однако для корректной работы его требуется должным образом настроить. Дальше приводится пример настройки для Debian/Ubuntu.
В последних версиях Debian/Ubuntu Sphinx изначально есть в репозиториях, поэтому установка делается очень просто:
sudo apt-get install sphinxsearch
В процессе этого также будет создан пользователь sphinxsearch.
Далее нужно создать файл /etc/sphinxsearch/sphinx.conf такого содержания:
source intb_post { type = mysql sql_host = localhost sql_user = пользователь_mysql sql_pass = пароль sql_db = база_данных sql_port = 3306 # optional, default is 3306 sql_query = \ SELECT p.id, p.uid AS owner, p.postdate, p.value, tx.data as text, t.title, t.id AS tid, f.id AS fid \ FROM intb_text tx \ LEFT JOIN intb_post p ON (p.id=tx.id) \ LEFT JOIN intb_topic t ON (p.tid=t.id) \ LEFT JOIN intb_forum f ON (f.id=t.fid) \ WHERE tx.type=16 AND p.status='0' AND t.status='0' sql_attr_uint = owner sql_attr_uint = fid sql_attr_uint = value sql_attr_timestamp = postdate } index idx_intb_post { source = intb_post path = /var/lib/sphinxsearch/data/intb_post docinfo = extern mlock = 0 morphology = stem_ru min_word_len = 2 } source intb_topic { type = mysql sql_host = localhost sql_user = пользователь_mysql sql_pass = пароль sql_db = база_данных sql_port = 3306 # optional, default is 3306 sql_query = \ SELECT t.id, t.owner AS owner, p.postdate AS postdate, t.title, f.id AS fid \ FROM intb_topic t \ LEFT JOIN intb_post p ON (p.id=t.first_post_id) \ LEFT JOIN intb_forum f ON (f.id=t.fid) \ WHERE p.status='0' AND t.status='0' sql_attr_uint = owner sql_attr_uint = fid sql_attr_timestamp = postdate } index idx_intb_topic { source = intb_topic path = /var/lib/sphinxsearch/data/intb_topic docinfo = extern mlock = 0 morphology = stem_ru min_word_len = 2 } indexer { mem_limit = 128M } searchd { listen = 127.0.0.1:9312 listen = 127.0.0.1:9306:mysql41 log = /var/log/sphinxsearch/searchd.log query_log = /var/log/sphinxsearch/query.log read_timeout = 5 max_children = 30 pid_file = /run/sphinxsearch/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1 workers = threads # for RT to work binlog_path = /var/lib/sphinxsearch/data }
Вместо пользователь_mysql, пароль и база данных нужно либо использовать те же настройки, с которыми Intellect Board подключается к БД. Другой вариант (более надёжный с точки зрения безопасности) — создать отдельного пользователя, у которого будет только SELECT-доступ к упомянутым в запросах таблицам БД.
Если Intellect Board установлен с префиксом, который отличается от intb_, то нужно исправить запросы (строки с sql_query=) соответствующим образом.

После этого нужно выполнить начальную индексацию командой
sudo -u sphinxsearch /usr/bin/indexer --all
и запустить собственно поисковый процесс с помощью systemctl start sphinxsearch
Почему-то в некоторых случаях sphinx так не запускается (в этом случае systemctl status sphinxsearch выдаёт Active: active (exited) и нет запущенного процесса searchd). В этом случае имеет смысл сделать новый unit. Для этого создайте файл /etc/systemd/system/searchd.service такого содержания:
[Unit] Description=Sphinx searchd daemon After=network.target [Service] Type=simple ExecStart=/usr/bin/searchd ExecStop=/usr/bin/searchd --stop RemainAfterExit=yes User=sphinxsearch Group=sphinxsearch [Install] WantedBy=multi-user.target

Далее сделайте sudo systemctl daemon-reload sudo systemctl enable searchd sudo systemctl start searchd

И последнее, что остаётся сделать — это повесить на cron регулярную переиндексацию содержимого форума. Для этого в crontab нужно прописать примерно такое:
55 */3 0 0 0 */usr/bin/indexer --all --rotate
Для форумов с большими базами имеет смысл настроить incremental indexing. Как это сделать — см. документацию по Sphinx.

Далее остаётся только зайти в настройки форума и указать тип поиска — Sphinx Search.
Если у вас несколько форумов на одном сервере, то у каждого должен быть уникальные имена source и index (и пути к файлам индексов). В версии 3.05 будут предусмотрены поля ввода для указания имён индексов, которыми должен пользоваться данный форум.

Критикуя — предлагай, предлагая — обосновывай!
4xpro.ru — мой личный сайт-мультиблог на Intellect Board.

Одна страница
Распечатать

У вас нет прав для отправки сообщений в эту тему.