Рубріки: Highload

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

admin

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

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

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 позволяет обновлять БД буквально на лету без необходимости частой переиндексации всех данных.

Останні статті

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024