Игорь Чакрыгин Игорь Чакрыгин

У любой задачи существует по крайней мере одно очевидное и невероятно простое для понимания неправильное решение

Sphinx - Установка и настройка

Не так давно я решил более подробно изучить замечательный механизм полнотекстового поиска, которыйносит название Sphinx. Вы наверняка слышали о нём. Его установка, настройка и использование действительно очень просты. Несмотря на это, при первой попытке разобраться во всех деталях могут возникнуть некоторые трудности.

В данной статье я хочу подробно описать процесс установки Sphinx в Windows. Данная статья рассчитана на людей, которые, также как и я, ещё мало знакомы со Sphinx (или совсем не знакомы). Опытные разработчики вряд ли найдут в ней что-то новое.

Шаг 1: Установка Sphinx

Первым делом скачаем последнюю версию Sphinx для Windows с сайта sphinxsearch.com. (На момент написания статьи это версия 2.1.1-beta).

Дистрибутив представляет собой zip-архив. Распакуем его, скопируем полученную папку на диск C и переименуем её в sphinx (изначально она называется sphinx-2.1.1-beta-win64-id64-full). Теперь утилиты, которые входят в состав Sphinx (такие как indexer.exe и searchd.exe), будут находиться в папке c:\sphinx\bin\. Выглядит это примерно так:

Основной интерес для нас представляет папка bin. В ней находятся все утилиты, которые мы будем использовать в дальнейшем. Также нам могут пригодиться файлы sphinx.conf.in и sphinx-min.conf.in, которые представляют собой шаблоны файлов конфигурации. Их можно использовать в качестве примеров при настройке Sphinx.

Шаг 2: Создание рабочей папки

Нам так же необходимо подготовить рабочую папку, в которой будут храниться файл конфигурации, индексы и логи. В папке sphinx создадим папку data, а в ней в свою очередь создадим пустой файл config.txt и папки index, log и binlog. Эти папки нужно создать заранее, т.к. Sphinx не сможет создать их сам (у меня, по крайней мере, не смог) и просто не запустится.

Шаг 3: Регистрация службы Sphinx

Чтобы запустить Sphinx, его необходимо зарегистрировать как службу Windows. Запустим командную строку от имени администратора и введём следующую команду:

c:\sphinx\bin\searchd --config c:\sphinx\data\config.txt --install --servicename Sphinx

При необходимости, удалить ранее установленную службу можно следующей командой:

c:\sphinx\bin\searchd --servicename Sphinx --delete

Шаг 4: Запуск службы Sphinx

Попытка сразу запустить зарегистрированную службу Sphinx завершится неудачей. Дело в том, что наш файл конфигурации (c:\sphinx\data\config.txt) пока ещё пуст. Добавим в него следующие строки:

searchd
{
    listen      = 9306:mysql41
    pid_file    = c:/sphinx/data/searchd.pid
    log         = c:/sphinx/data/log/log.txt
    query_log   = c:/sphinx/data/log/query_log.txt
    binlog_path = c:/sphinx/data/binlog/
}

Я намеренно убрал все необязательные настройки, оставив только самые важные.

  • Настройка listen указывает, что Sphinx будет использовать порт 9306 и протокол mysql. Использование протокола mysql позволяет подключаться к Sphinx как к обычной базе данных MySQL.
  • Настройка pid_file указывает расположение pid-файла, который используется для внутренних нужд.
  • Настройки log и query_log указывают расположение файлов логов, в которые будут записываться все события.
  • Настройка binlog_path указывает расположение файлов, которые могут использоваться для восстановления данных real-time индексов после сбоя.

Помимо этого, для запуска службы Sphinx необходимо создать хотя бы один индекс. В одной из следующих статей я постараюсь рассказать о создании индексов подробнее, а пока просто создадим фейковый real-time индекс. Добавим в файл конфигурации следующие строки:

index fake_index
{
    type     = rt
    path     = c:/sphinx/data/index/fake_index
    rt_field = fake_field
}

Теперь зайдём в Панель управления - Администрирование - Службы, найдём в списке службу Sphinx и запустим её. При следующем запуске компьютера эта служба должна будет запускаться автоматически.

Шаг 5: Первый запрос

Как я уже упоминал выше, Sphinx поддерживает протокол MySQL, поэтому для подключения к нему и выполнения запросов можно использовать консольный клиент для этой базы данных.

С другими клиентами, такими как HeidiSQL, всё хуже, поскольку при подключении они пытаются выполнить некоторые команды, которые Sphinx просто не поддерживает (например, пытаются получить список баз данных или информацию о текущем пользователе). В результате подключение создать так и не получается.

Скачаем дистрибутив MySQL с сайта mysql.com. Распакуем скачанный zip-архив, скопируем полученную папку на диск C и переименуем её в mysql. Теперь утилиты, которые входят в состав MySQL (нас интересует только mysql.exe), будут находиться в папке c:\mysql\bin\.

Чтобы запустить консольный клиент и подключиться к Sphinx, откроем командную строку и введём команду:

c:\mysql\bin\mysql -h 127.0.0.1 -P 9306

Теперь мы можем выполнять различные запросы на языке SphinxQL. Поскольку у нас пока нет ни одного индекса (кроме индекса fake_index, который пуст и поэтому мало чем интересен) в качестве первого запроса получим статистику использования Sphinx. Введём следующую команду (точка с запятой в конце каждой команды является обязательной для консольного клиента):

show status;

Готово. Мы установили и настроили Sphinx, а также смогли выполнить одну команду. Можно переходить к созданию индексов.

Заключение

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

В следующей статье я постараюсь рассказать о создании индексов с использованием в качестве источников данных базы данных MS Sql Server и xml-фалов, а также приведу примеры запросов.

6 комментариев

  1. Спасибо за статью, ждем продолжения.

    ОтветитьУдалить
  2. Спасибо за цикл статей, полезная информация в доступной форме.

    ОтветитьУдалить
  3. Хочу заметить, на всякий случай, для новичков: если команда c:\mysql\bin\mysql -h 127.0.0.1 -P 9306 не сработает у вас, попробуйте ввести без указания порта и параметра -P

    ОтветитьУдалить
  4. Мне кажется, что тогда подключение будет к стандартному порту mysql (3306), соответственно подключитесь не к сфинксу, а к mysql.

    ОтветитьУдалить
  5. Светлана Пустовалова18 декабря 2013 г. в 10:15

    Если устанавливаем binlog_path, то обязательно нужно установить binlog_max_log_size!!!! Иначе лог съест все место!

    ОтветитьУдалить
  6. Конечно, так и есть. Порт обязательно нужен.

    ОтветитьУдалить

© Игорь Чакрыгин. Все права защищены при помощи чёрной магии. Технологии Blogger.