Руководство: Установка и настройка Sphinx на Windows + MS SQL (Часть 1. Установка)

Установка

Поначалу пугала такая мощь как Sphinx. Учитывая, что материалов на русском языке достаточно мало - приходилось изучать документацию и различные сайты на английском. Тем не менее установка прошла очень гладко.

Сначала скачиваем файлы с сайта http://sphinxsearch.com/downloads/release/. Для работы с MS SQL достаточно первого файла. У меня это был Win64 binaries w/MySQL+id64 support. База представляет из себя zip архив. Распаковываем на диск. 

Установка Sphinx

Я распаковал его по адресу C:\Sphinx. В файлах sphinx.conf.in и sphinx-min.conf.in есть примеры для конфигурации движка. Отличительная особенность от MS SQL - здесь все настройки задаются в файле конфигурации. Сам поиск это Windows служба. Отдельно поставляется модуль индексации - исполняемый файл, который пользуется тем же самым конфигурационным файлом. В файлах можно найти необходимые настройки. Большинство примеров в интернете реализовано для Unix/php. Мы же используем Windows + MS SQL.

До начала работы необходимо создать окружение. Сам сфинкс не будет ничего делать. Мы сами организуем файловую систему как считаем нужным. Создаем папку data, если ее нет и следующие папки внутри. Далее считаем что эти директории уже существуют. 

Установка Sphinx для Windows

Установка службы Sphinx

Устанавливаем Sphinx как службу Windows. Но пока ее не запускаем, до написания конфигурационного файла. 

Установка

c:\sphinx\bin\searchd –config c:\sphinx\sphinx.conf.in –install –servicename Sphinx

Удаление

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

Следует заметить, что удаление службы необходимо при изменении расположения конфигурацинного файла. При любом измении содержимого конфигурационного файла необходимо перезапустить службу.

Windows Sphinx

Настройка индексации

Все интересное как раз в этом файле - он рассказывает сфинксу как использовать наши данные. Какие поля какого типа, как искать и другие настройки. Файл состоит минимум из 4-х секций:

  1. Источник данных (source) - информация о сервере хранения данных, в моем случае SQL-Server
  2. Индекс (index) - настройки индексации данных, указанных в источнике
  3. Индексатор (indexer) - служба постройки индекса
  4. Поисковик (searchd) - Windows служба поиска.

Источник данных (source)

Источники могут наследовать настройки предков. Для начала создадим источник с информацией о сервере.

source mssql
{
    type            = mssql

sql_host        = \SQLSERVER
sql_db          = database_name
sql_port        = 1433  # optional, default is 3306, for ms sql is 1433

mssql_winauth = 1
mssql_unicode = 1

}

Флаг mssql_winauth=1 говорит о том, что для соединения с сервером базы данных необходимо использовать Windows авторизацию. mssql_unicode - кодировка. Кодировки довольно тонкое место в Sphinx, т.к. о том, что кодировка не верная можно узнать только по результатам поиска. Сфинкс ничего не скажет о кодировке и проиндексирует данные в любой форме.

Следующий шаг - настройка данных для индексации

source catalog : mssql
{

sql_query       = \
    SELECT Id, Name, OfferPrice
    FROM SphinxView

sql_attr_bigint     = Id
sql_field_string    = Name
sql_attr_float      = OfferPrice    

}

sql_query -  запрос для индексации данных. У нас это View в MS SQL Server. Ниже описываются атрибуты для индексации. Часто используемые типы:

Другие типы и дополнительная информация показаны в таблице ниже:

Типы данных в Sphinx

 

Секцию источника данных мы настроили, переходим дальше.

Настройка индекса (index)

index offers
{
    source      = catalog
    path        = C:/Sphinx/data/index/offers
charset_type = utf-8 morphology = lemmatize_ru enable_star = 1 min_infix_len = 3

}

По порядку:

Индексатор (indexer)

indexer
{
    mem_limit       = 500M
    lemmatizer_base = C:\Sphinx\DICTS
}

Устанавливаем лимит памяти для программы индексирования. Нужно помнить, что индексирование - довольно важный процесс, но не должен отнимать много ресурсов на сервере. На локальной машине можно не жалеть. Вторым пунктом указываем путь до папки с файлом морфологии, который скачали в предыдущем пункте.

Поиск (searchd)

searchd
{
max_matches = 500000
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/
mysql_version_string = 5.0.0
}

Мы используем Sphinx для работы с MS SQL и используем ASP.NET API для доступа к данным. Поэтому необходимо настроить службу так, чтобы можно было удобно работать из .NET. В следующей статье расскажу, как работать со сфинксом из .net. А сейчас пока настроим. 

Запуск индексации

После всех настроек запускаем индексацию. Для этого был написан отдельный bat файл:

c:\sphinx\bin\indexer offers –config c:\sphinx\sphinx.conf.in –rotate –print-queries

Флаг –rotate означает, что индексаия будет выполняться наживую, т.е. при работающей службе поиска. После завершения индексации индекс будет заменен на новый.

И проиндексирована база данных

Индексация Sphinx

Результаты впечатляют

Сравнение Sphinx и MS SQL

Общая схема API в разрабатываемом мобильном приложении выглядит так:

общая схема API

Ссылки

Комментарии

comments powered by Disqus