[Хд] logo

Real Time индексы в Sphinx'e

У системы полнотекстового поиска Sphinx много сильных сторон. Одна из них — индексы в реальном времени. Real-time indexes

При помощи этой функции можно “на лету” обновлять поисковые индексы, так что поисковая база всегда будет в актуальном состоянии.

RT-индексы пригодятся в том случае, когда БД уже проиндексирована, но в нее нужно в реальном времени вносить новые/обновленные или удалять несуществующие данные. Они хранятся в оперативной памяти в отдельном чанке. При его заполнении данные переносятся на диск, а ОЗУ очищается.

Схема индексации

Real time индексы подходят для быстро и часто изменяемой информации, но это не самое лучшее решение для длительного хранения больших объемов данных. Так что оптимальным решением будет задание основного индекса, в котором будут содержаться все записи (или с определенного момента), и который перестраивается, скажем, раз в сутки, а также RT-индекса с новыми данными.

Объявление основного индекса

В целом, объявление всех необходимых настроек присутствует в материале об индексации больших объемов данных в Sphinx, поэтому приведем лишь кусочек кода:

index product_index
{
    source        = product_shop
    path          = /var/data/product_shop
    charset_type  = utf-8
}

# Индексация таблицы product_shop

Объявление Real Time индекса

После добавления основного индекса, в файл конфигурации sphinx.conf нужно добавить RT-индекс:

index product_rt 
{
    type = rt
    path = /var/data/product_rt

    # Описание всех полей для индексирования
    rt_field = title
    rt_field = content

    #Описание атрибутов
    rt_attr_uint = added
    rt_attr_uint = product

    # Размер чанка для RT
    rt_mem_limit = 256M
}

# Объявление RT-индекса с описанием полей индексации и атрибутов

Обратите внимание на директиву rt_mem_limit. Тестирование производительности Sphinx показывает, что высокое значение лимита памяти (от 256 МБ и выше для больших БД) существенно улучшает скорость поиска и обновления индекса. Таким образом можно уменьшить количество дисковых фрагментов RT на диске для повышения производительности при большом количестве операций чтения/записи. Sphinx находится в активной разработке, так что оптимизации обязательно появятся в следующих версиях.

Объединение индексов

Теперь осталось объединить оба индекса, проприсав нужную конфигурацию все в том же файле sphinx.conf:

index product
{
  type = distributed
  local = product_index
  local = product_rt
}

# Объявление распределенного индекса, который объединяет основной и RT индексы

После этого не забудьте перезапустить индексацию и демон searchd.

Самое главное

Real Time индексация в Sphinx позволяет обновлять БД буквально на лету без необходимости частой переиндексации всех данных.

  read in english
[Хд]

Подписывайтесь на отборные материалы по продвинутой разработке

Google Email

Esc, чтобы подписаться позже