Настройка Sphinx для морфологеского поиска
Пример файла конфигурации
Одна страница
Распечатать
. Редактировалось 1 раз, последний — #1
C версии 3.00 Intellect Board поддерживает поиск с помощью Sphinx Search с учётом словоформ. Однако для корректной работы его требуется должным образом настроить. Дальше приводится пример настройки для Debian/Ubuntu.
В последних версиях Debian/Ubuntu Sphinx изначально есть в репозиториях, поэтому установка делается очень просто:
В процессе этого также будет создан пользователь sphinxsearch.
Далее нужно создать файл /etc/sphinxsearch/sphinx.conf такого содержания:
Вместо пользователь_mysql, пароль и база данных нужно либо использовать те же настройки, с которыми Intellect Board подключается к БД. Другой вариант (более надёжный с точки зрения безопасности) — создать отдельного пользователя, у которого будет только SELECT-доступ к упомянутым в запросах таблицам БД.
Если Intellect Board установлен с префиксом, который отличается от intb_, то нужно исправить запросы (строки с sql_query=) соответствующим образом.
После этого нужно выполнить начальную индексацию командой
и запустить собственно поисковый процесс с помощью
Почему-то в некоторых случаях sphinx так не запускается (в этом случае systemctl status sphinxsearch выдаёт Active: active (exited) и нет запущенного процесса searchd). В этом случае имеет смысл сделать новый unit. Для этого создайте файл /etc/systemd/system/searchd.service такого содержания:
Далее сделайте
И последнее, что остаётся сделать — это повесить на cron регулярную переиндексацию содержимого форума. Для этого в crontab нужно прописать примерно такое:
Для форумов с большими базами имеет смысл настроить incremental indexing. Как это сделать — см. документацию по Sphinx.
Далее остаётся только зайти в настройки форума и указать тип поиска — Sphinx Search.
Если у вас несколько форумов на одном сервере, то у каждого должен быть уникальные имена source и index (и пути к файлам индексов). В версии 3.05 будут предусмотрены поля ввода для указания имён индексов, которыми должен пользоваться данный форум.
В последних версиях 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.
Одна страница
Распечатать У вас нет прав для отправки сообщений в эту тему.