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-фалов, а также приведу примеры запросов.
Спасибо за статью, ждем продолжения.
ОтветитьУдалитьСпасибо за цикл статей, полезная информация в доступной форме.
ОтветитьУдалитьХочу заметить, на всякий случай, для новичков: если команда c:\mysql\bin\mysql -h 127.0.0.1 -P 9306 не сработает у вас, попробуйте ввести без указания порта и параметра -P
ОтветитьУдалитьМне кажется, что тогда подключение будет к стандартному порту mysql (3306), соответственно подключитесь не к сфинксу, а к mysql.
ОтветитьУдалитьЕсли устанавливаем binlog_path, то обязательно нужно установить binlog_max_log_size!!!! Иначе лог съест все место!
ОтветитьУдалитьКонечно, так и есть. Порт обязательно нужен.
ОтветитьУдалить