Sphinx и drupal на примере blogroll-pcmag-ru

новость от 01.03.2010 19:58:29 под моей редакцией для отображения технической сути :)

Sphinx(Сфинкс) является системой полнотекствого поиска, распространяемой под лицензией GPL второй версии.

Сфинкс позволяет добавить функции быстрого полнотекстового поиска в сторонние приложения и был специально спроектирован для взаимодействия с реляционными базами данных и скриптовыми языками программирования. На данный момент движок позволяет индексировать данные, хранящиеся в базах данных MySQL, PostgreSQL или в любом другом формате через XML-шлюз.

На blogroll.pcmag.ru запущен поисковый модуль. Собственно, необходимость в нем ощущалась довольно давно, несмотря на то, что все записи там плотно перевязаны и авто классифицированы умными роботами, расставляющими сообразные смыслу теги, иногда возникала надобность найти нечто, не попавшее по формальным признакам в главный смысловой кластер описания.

Сложность заключается в том, что то, что когда-то задумывалось как небольшой проект, за пару лет жизни разрослось в весьма и весьма обширную БД. Сейчас там примерно 150 тыс. записей, со всей служебной информацией (логи, кэши и др.) БД готовится перевалить за гигабайт.

Стандартные средства поиска в Drupal (а именно на этой CMS сделан сайт) решить такие задачи могут… Теоретически. На практике, СУБД на сервере загружается просто до неприличного уровня, сам Drupal любит БД, да еще и поисковые запросы… Фокусы с полнотекстовыми индексами в MySQL тоже не годятся, при таких объемах индекс начинает существенно тормозить вставку новых записей. Плюс есть сложности со стеммнгом (русский язык все-таки), с языком запросов, группировкой данных и др. Ну и в целом не дело это, специализированной задачей грузить сервер общего назначения.

В итоге, было решено испробовать Sphinx.

Сам по себе Shinx оказался достаточно прост в инсталляции.

Sphinx формирует собственный индекс, откуда и вынимает данные. В БД не лазит. Как следствие, его надо сопрягать с Drupal. Существует два модуля, sphinxsearch и просто sphinx (Sphins Integration), первый весьма развесистый по функциональности, интегрируется со стандартным Search, имеет подсистемы разграничения доступа, контроля числа запросов (типа анонимные посетители могут сделать 10 запросов в час, зарегистрированные — 300) и др. Второй попроще, практически не документирован, но сделан более рационально.

Модуль sphinxsearch пытается интегрироваться с поисковым модулем через XMLPipe.
На практике — чудовищный оверхед при передаче данных из БД поисковому индексатору, масса излишнего кода для управления всем этим хозяйством, странные глюки, связанные с попытками этого кода как-то контролировать ресурсы, необходимость привлекать для загрузки данных из XMLPipe wget индексирование свойств — надо было переписывать модуль.

Решено юзать модуль, sphinx.
Недоставало — возможности контроля количества запросов — решилось стандартными средствами Drupal (функции контроля «флуда»). А самое главное — не умничает. Цепляется сразу к БД, без промежуточных извращений, индекс генерируется за ~30 с.


Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title