Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах

Настройка поиска часто изменяющихся данных в Sphinx?

Всем доброго праздничного дня!


Есть некоторый массив данных, по которому требуется организовать поиск, по множеству критериев.

Понимая, что конёк сфинкса — всё же полнотекстовый поиск, а в моем случае его не требуется, я таки провёл тесты, которые однозначно подтвердили — «надо брать».

Осталось спроектировать схему работы и обновления индексов.


Итак,

Данные (немного конкретики: десятки тысяч объявлений) лежат в мускуле, где с ними регулярно происходит весь спектр CRUD-операций. Допустима задержка актуальности индекса в пределах 5 минут.

Как организовать обычный индекс? Схема «основной индекс, обновляющийся в 00:00 + дельта-индекс за сегодня, обновляющийся раз в 5 минут» обеспечит обновление изменившихся данных? Как вы делали похожую задачу, если перед вами такая однажды стояла?


Сразу скажу, что в силу некоторых причин я пока не могу использовать для задачи RT-индексы — не получится быстро переделать приложение так, чтобы наряду с выполнением запросов к mysql он их отправлял в sphinx. Хотя, если есть способ, как можно настроить своего рода «репликацию» нескольких таблиц, где мастером будет мускул, а слэйвом — сфинкс — очень даже рассмотрю такой вариант.
  • Вопрос задан
  • 5240 просмотров
Решения вопроса 1
Assargin
@Assargin Автор вопроса
Перед ответом смотрю наличие ✔ в ваших вопросах
В общем, решил с помощью дельта-индекса. Основной индекс (раз в сутки), дельта-индекс+мёрж его в основной (каждые 3 минуты). новые и обновленные документы появляются в основном индексе сами, для выбрасывания удаленных же определил sql_query_killlist в дельта-индексе. Всем спасибо!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
opium
@opium
Просто люблю качественно работать
Что такое у вас изменившиеся данные, если вы изменили вчерашние данные то конечно дельта индекс не учтет их либо их надо как то по особому менять, то есть делать новое объявление.
Ответ написан
Lux_In_Tenebris
@Lux_In_Tenebris
в силу некоторых причин я пока не могу использовать для задачи RT-индексы — не получится быстро переделать приложение так, чтобы наряду с выполнением запросов к mysql он их отправлял в sphinx

теоретически можно просто сделать триггер на обновление таблиц(ы) + подцепить сервер Sphinx'а через FEDERATED storage engine
Ответ написан
Assargin
@Assargin Автор вопроса
Перед ответом смотрю наличие ✔ в ваших вопросах
С основной mysql-базой такой номер не прокатит)

Я тут еще посмотрел на тему мёржа индексов:
highload.com.ua/index.php/2009/11/30/sphinxsearch-index-merging/

Получается, чтобы «обновить» в основном индексе имеющейся документ, нужно чтобы этот документ оказался в дельта-индексе, и плюс указать фильтр при мёрже для удаления из основного индекса удаленных и изменных документов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы