У системы полнотекстового поиска 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 позволяет обновлять БД буквально на лету без необходимости частой переиндексации всех данных.
Visual Code от Microsoft, вероятно, один из самых популярных редакторов кода. Разработчики любят его за…
Япония сама по себе — сплошной киберпанк. Это заметил даже культовый писатель жанра Уильям Гибсон,…
Сам по себе телефон Айфон 17 Про Макс – отличный подарок. У него красивая заводская…
На фоне роста спроса на ликвидность в бычьем рынке 2025 года, криптозаймы снова выходят на…
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…