У системы полнотекстового поиска Sphinx много сильных сторон. Одна из них — индексы в реальном времени.
При помощи этой функции можно “на лету” обновлять поисковые индексы, так что поисковая база всегда будет в актуальном состоянии.
RT-индексы пригодятся в том случае, когда БД уже проиндексирована, но в нее нужно в реальном времени вносить новые/обновленные или удалять несуществующие данные. Они хранятся в оперативной памяти в отдельном чанке. При его заполнении данные переносятся на диск, а ОЗУ очищается.
Real time индексы подходят для быстро и часто изменяемой информации, но это не самое лучшее решение для длительного хранения больших объемов данных. Так что оптимальным решением будет задание основного индекса, в котором будут содержаться все записи (или с определенного момента), и который перестраивается, скажем, раз в сутки, а также RT-индекса с новыми данными.
В целом, объявление всех необходимых настроек присутствует в материале об индексации больших объемов данных в Sphinx, поэтому приведем лишь кусочек кода:
index product_index { source = product_shop path = /var/data/product_shop charset_type = utf-8 }
#Индексация таблицы product_shop
После добавления основного индекса, в файл конфигурации 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 в Украине, особенно для…
В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…
Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…
Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…
Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…
IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…