Real Time индексы в Sphinxsearch
Jul 4, 2016 12:44 · 245 words · 2 minute read
Sphinxsearch — система полнотекстового поиска с множеством отличительных особенностей. Одна из таких особенностей — возможность обновлять поисковые индексы в режиме Real Time.
Такие индексы будут особенно полезны если БД проиндексирована, но в нее нужно «на лету» вносить новые и удалять устаревшие данные. Давайте разберемся!
Поскольку Real Time индексы хранятся в оперативной памяти, то это идеальный вариант для хранения небольшого объема быстро и часто изменяемых данных. Однако такое решение плохо подходит для длительного хранения больших объемов информации.
На сегодняшний день лучше всего использовать и основной индекс (содержащий все записи) и Real Time индекс (актуальные записи). Основной индекс, если в нем находится много записей, лучше перестраивать 1-2 раза в сутки.
Для этого в конфигурационном файле (по умолчанию /etc/sphinxsearch/sphinx.conf
) должно присутствовать описание основного индекса, например:
index test_index
{
source = main
path = /var/spool/sphinx/test_index
charset_type = utf-8
}
Real Time индекса:
index test_rt
{
type = rt
path = /var/spool/sphinx/test_rt
# Поля для индексирования
rt_field = title
# Атрибуты
rt_attr_uint = added
# Лимит оперативной памяти для RT индекса
rt_mem_limit = 256M
}
и, наконец, описание распределенного индекса, который объединяет основной и Real Time индекс:
index test
{
type = distributed
local = test_index
local = test_rt
}
После внесения изменений необходимо запустить переиндексацию и поисковый движок:
/usr/bin/indexer --rotate --all
/etc/init.d/sphinxsearch restart
При использовании Real Time индексов стоит обратить внимание на значение параметра rt_mem_limit
, который устанавливает лимит оперативной памяти. По информации разработчиков, для больших БД стоит использовать значение > 256M
— это существенно ускоряет поиск и обновление индекса.