LinkAider

Как вы используете Sphinx Search API?

Posted in Development, LinkAider, Projects, Sphinx Search, ZendFramework on December 21st, 2009 by Yaroslav Vorozhko – Be the first to comment

Sphinx Search API для PHP пердставляет собой единый класс, который позволяет использовать все возможности Sphinx Search через его интерфейс. Но, такой класс является удобным только для небольших скриптов и задач.
Для более сложных задач и больших веб приложений необходимо другое решение. И это решения является проектированием и реализацией собственной обертки для Sphinx Search API.

В нашем проекте LinkAider.com мы используем следующие понятия и классы при работе с Sphinx Search:

  1. Сфинкс клиент, отвечающий за подключение, выполнение запросов и обработку ошибок. Для разработчика сфинкс клиент невидим, мы только сообщаем ему параметры подключения к searchd.
  2. Сфинкс индекс – это один из основных классов, с которым работает разработчик, этот класс отвечает за формирование запросов и выполнение запросов через Сфинкс клиент, а также за обработку результатов запроса.
  3. Сфинкс запрос – это еще один класс к которому обращается разработчик для составления запросов. Каждый запрос отвечает за свои индекс к которому обращается, а также содержит свои фильтры, группировки, сортировки и собственно сам запрос.
  4. Сфинкс результат – это класс, который разбирает ответ сфинкса и предоставляет удобный интерфейс к информации по каждому запросу, также он содержит информацию об ошибках, которую испльзуетя Сфинкс клиент для логирования. Сфинкс результат используется разработчиками для создания запросов к базе данных и получения искомых данных.

Пример работы выглядит следующим образом:

  1. Мы создаем объект Сфинкс индекс, который инициализирует Сфинкс клиент, устанавливая для него параметры подключения.
  2. Потом мы создаем объекты запросы для каждого указываем фильтры, группировки и т.п., и указываем к какому индексу делать запрос. Запросов может быть один или несколько, несколько запросов обрабатываються паралельно, что улучшает общую производительность системы.
  3. Каждый созданный запрос мы добавляем в Сфинкс индекс, при добавлении мы можем также указатьк какому индексу делать запрос.
  4. Специальный метод Run класса Сфинкс индекс запускает все запросы и как результат возвращает нам объект Сфинкс результат.
  5. Данные из Сфинкс результата мы используем чтоб создать запросы к базе данных и получить искомые данные.

Преимущеста, которые мы получем от работы с такой библотекой – это простота. Разработчик используя объект Сфинкс запрос может выполнять любые запросы.
Сфинкс результат предоставляет удобную обертку над массивом результата.
Нет необходимости помнить множество констант SphinxClient и парсить массив результата. В общем это выглдит так, как будто вы работаете с обычной таблицой, но не до конца. :)

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

Решение я вижу, в привязке каждого запроса к определенной таблице или группе таблиц.

По описнной выше логике я разрабатываю модуль Sphinx Search для Zend Framework, который я планирую выложить в откртый доступ очень скоро, возможно к новому году.

Поэтому хотелось бы узнать как вы используете Sphinx Search и какие преимущества и недостатки вывидите у вашего подхода.

Буду рад любым советам и рекомендациям.