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

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

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


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

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

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


Итак,

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

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


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

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

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

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

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

Похожие вопросы