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

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

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023