Настройка Sphinx для индексации динамического набора таблиц

Я нахожусь в процессе настройки нового многосайтового экземпляра WordPress 3.0 и хотел бы использовать Sphinx на сервере базы данных для поиска основного веб-сайта. В идеале этот основной сайт должен предлагать возможность поиска по своему контенту (сообщениям, страницам, комментариям, профилям участников, обновлениям активности и т. д.), а также по всем другим сайтам, которые являются частью сети. Поскольку мы будем регулярно добавлять новые сайты в сеть, я хотел бы иметь возможность динамически добавлять эти недавно сгенерированные таблицы в файл Sphinx .conf (вместо редактирования файла и переиндексации каждый раз, когда мы добавляем новый сайт). сайт).

К сожалению, MySQL не поддерживает подстановочные знаки при указании таблицы( s) в строке запроса. лучшее решение, с которым я столкнулся для захвата динамического набора таблиц, это grepping, но я почти уверен, что не знаю, как это сделать в файле .conf (если только это не возможно с помощью магического колдовства).

Можно ли динамически указывать таблицы для добавления в индекс Sphinx? Или это вызовет такие проблемы с производительностью, что я использую не тот инструмент?


person Daniel Bachhuber    schedule 21.07.2010    source источник


Ответы (3)


Вместо этого вы можете попробовать динамически изменить файл .conf.

person scribu    schedule 21.07.2010

Вы можете запросить из представления MySQL, которое объединяет множество таблиц. Вам придется заново создавать представление при каждом изменении списка блогов, но я считаю, что для этого существуют все хуки, и создать запрос представления должно быть достаточно просто.

Большая проблема может заключаться в попытке найти подходящий уникальный идентификатор записи для сообщений в Sphinx. Это должен быть прямой INT, но идентификаторы сообщений из разных блогов будут конфликтовать друг с другом.

person Casey Bisson    schedule 22.07.2010

Я думаю, вы можете создать триггеры (INSERT/UPDATE/DELETE) в MySQL для заинтересованных таблиц (например, сообщений, комментариев и т. д.) и перенести данные в централизованные глобальные таблицы, которые индексируются Sphinx в режиме реального времени.

Дело в том, как вы можете создавать эти триггеры автоматически? Либо вы можете запустить задание cron для сканирования новых таблиц в MySQL, либо, я думаю, вы можете написать простой плагин Wordpress, который перехватывает активацию блога.

person tszming    schedule 24.07.2010