Подразумеваем, что база данных уже создана. Если нет, то тестовую БД можете скачать здесь.

Скачайте актуальный релиз поисковой системы Sphinx с официального сайта: http://sphinxsearch.com/downloads/release/. На момент написания статьи последний релиз был Sphinx 2.2.9-release, я выбрал Win64 binaries w/MySQL+id64 support

Распакуйте архив в папку C:\Sphinx. После разархивирования папка будет выглядеть следующим образом:

Установка и настройка Sphinx на Windows. Структура папок Sphinx

Далее необходимо создать внутри папки C:\Sphinx еще 3 папки: data, log и dicts:

Установка и настройка Sphinx на Windows. Создание папок data, log, dicts

Внутри папки log создаем 3 файла: query.log, searchd.log и search.pid:

Установка и настройка Sphinx на Windows. Создание файлов query.log, searchd.log, search.pid

Открываем командную строку Windows (консоль, Win + R и вводим cmd). Первое, что необходимо сделать - это установить службу Sphinx с помощью команд:

C:\Sphinx\bin\searchd --install --config C:\Sphinx\sphinx.conf.in --servicename SphinxSearch

где ключ servicename определяет имя Вашей службы. После установки Вы увидите следующее сообщение в консоле:

Установка и настройка Sphinx на Windows. Установка в командной строке

Для удаления необходимо выполнить команду:

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

Далее необходимо создать кешированные Sphinx-ом документы по которым он будет осуществлять поиск (индексы). Для создания индексов необходимо сконфигурировать файл настроек этой системы. Внутри релиза уже представлены два файла: один с полным описанием - sphinx.conf.in, второй только с обязательными настройками sphinx-min.conf.in.Сделаем резервную копию файла sphinx.conf.in. Далее открываем его для редактирования, оставим, то что нужно, остальное удалим. Пример файла sphinx.conf.in(файл должен состоять минимум из 4 секций):


# data source definition
source mainConfSourse
{
	type			= mysql
	sql_host		= localhost
	sql_user		= root
	sql_pass		=
	sql_db			= test_sphinx
	sql_port		= 3306    # optional, default is 3306
	sql_query_pre		= SET NAMES utf8
}

# наследник 1
source testDocSrc : mainConfSourse 
{
	#пример запроса с джойном, обыйный SQL
	sql_query = SELECT documents.id AS id, documents.title AS title, documents.content AS content, \ 
		tags.docid AS docid, tags.tagid AS tagid \	
		FROM documents \ 
		LEFT JOIN tags ON(tags.docid = documents.id) \	
		WHERE documents.group_id=1;

	#здесь вы должны указать по каким полям будете группировать результаты, 
	#лучше указать все которые были перечислены сверху, тогда выглядеть будет логично
	#type of group fields
	sql_field_string = id
	sql_field_string = title
	sql_field_string = content
	sql_field_string = docid
	sql_field_string = tagid
}

index testDocIndex
{
	source			= testDocSrc
	path			= C:/Sphinx/data/testDoc/testDoc
	morphology		= stem_enru
	min_word_len		= 1
	# dict			= keywords
	# mlock			= 0	
	# docinfo		= extern
	# morphology		= stem_en, stem_ru, soundex
	# morphology		= libstemmer_german
	# morphology		= libstemmer_sv
	# min_stemming_len	= 1
	# wordforms		= C:/Sphinx/data/wordforms.txt
	# ngram_chars		= U+3000..U+2FA1F
	# phrase_boundary	= ., ?, !, U+2026 # horizontal ellipsis
}

# наследник 2
source testDoc2Src : mainConfSourse
{
	sql_query = SELECT documents.id AS id, documents.title AS title, documents.content AS content \
		FROM documents;

	#type of group fields
	sql_field_string = id
	sql_field_string = title
	sql_field_string = content
}

index testDoc2Index
{
	source			= testDoc2Src
	path			= C:/Sphinx/data/testDoc2/testDoc2
	morphology		= stem_enru, Soundex, Metaphone
	min_word_len		= 1
	expand_keywords		= 1
	index_exact_words	= 1
	min_infix_len		= 3
}

##############################

indexer
{
	mem_limit	= 64M
}

searchd
{
	listen			= 127.0.0.1:9306:mysql41
	pid_file		= C:/Sphinx/log/searchd.pid
	log			= C:/Sphinx/log/searchd.log
	query_log		= C:/Sphinx/log/query.log
	#binlog_path		= c:/sphinx/data/binlog/	
	mysql_version_string	= 5.0.0

	seamless_rotate		= 1
	preopen_indexes		= 1
	unlink_old		= 1
}

Скачать этот файл конфигураций можно здесь.

Возвращаемся в консоль и вводим команду для создания индекса.

Сейчас будем использовать первую команду:

C:\Sphinx\bin\indexer --all --config C:\Sphinx\sphinx.conf.in

После успешного создания индексов в консоле Вы увидите примерно следующее:

Установка и настройка Sphinx на Windows. Успешное создание индексов

Далее необходимо запустить службу SphinxSearch. Для этого открываем меню Пуск Панель управления Администрирование Службы SphinxSearch Запустить (Start Control Panel Administrative Tools Services SphinxSearch Start).

Установка и настройка Sphinx на Windows. Запуск службы SphinxSearch

Идем далее, если Вы используете denwer, то в консоле введите команду перехода в mysql denwer (путь может отличаться):

d:
d:/web/usr/local/mysql-5.5/bin/mysql -h 127.0.0.1 -P 9306

Для более корректного отображения кирилицы можно к команде дописать ключ устанавливающий кодировку по умолчанию, тогда команда примет вид:

d:/web/usr/local/mysql-5.5/bin/mysql -h 127.0.0.1 -P 9306 --default-character-set=utf8

После выполнения команды Вы увидите следующее:

Установка и настройка Sphinx на Windows. Готовимся к первому запросу

Если у Вас установлен "чистый" MySql, то в консоле введите команду mysql. Если MySql не добавлен в переменные среды windows, то пропишите полный путь к нему, по примеру denwer.

И так, мы зашли в консоль MySql и теперь проверим работу sphinx. Для этого выполним следующий запрос:

SELECT title FROM testDocIndex LIMIT 5;

Получим следующее:

Установка и настройка Sphinx на Windows. Тестовый запрос к БД

Готово! Sphinx установлен и работает! Если при проверке кирилица в консоли выглядит "кривыми иероглифами" не волнуйтесь, дело в кодировке ОС, скорее всего на сайте будет все нормально.