Real Time индексы в Sphinxsearch

Jul 4, 2016 12:44 · 245 words · 2 minute read sphinxsearch

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 — это существенно ускоряет поиск и обновление индекса.

tweet Share