Установка и настройка sphinx на Debian 7.

27.10.2015

На самом деле установка sphinx очень проста. Лучше всего ставить по мануалу на официальном сайте, чтобы получить последнюю свежую версию сфинкса.

Идем на офф. сайт и попадаем прямо у в секцию установки sphinx для Debian/Ubuntu и выполняем указанные команды в консоли.

apt-get install mysql-client unixodbc libpq5 - устанавливаем зависимости (скорее всего mysql-client у Вас уже стоит, если это так, то можно его и выбросить из этой строчки)

Скачиваем последний релиз sphinx, для этого идем сюда. И находим сборку сфинкса под свою систему. Далее копируем адрес ссылки на кнопке Download напротив выбранного пакета. Например:

https://sphinxsearch.com/downloads/sphinxsearch_2.2.10-release-1~wheezy_amd64.deb/thankyou.html

Изменяем ссылку вот так:

https://sphinxsearch.com/files/sphinxsearch_2.2.10-release-1~wheezy_amd64.deb

Далее в консоли:

cd /tmp

wget https://sphinxsearch.com/files/sphinxsearch_2.2.10-release-1~wheezy_amd64.deb

dpkg -i sphinxsearch_2.2.10-release-1_amd64.deb - имя скачанного пакета (смотрим через ls -l или набираем sphinx и нажимаем клавишу "Tab")

 

После установки останавливаем демон sphinx:

service sphinxsearch stop

 

И настраиваем конфигурационный файл в папке /etc/sphinxsearch/sphins.conf

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

#Первый источник данных настройки которого будут наследовать остальные источники

source site1
{
type = mysql

sql_host = 127.0.0.1
sql_user = user # вводим пользователя бд mysql
sql_pass = pass # пароль
sql_db = name_db # имя базы данных
sql_port = 3306 # optional, default is 3306

mysql_connect_flags = 32 # enable compression
sql_query_pre = SET NAMES utf8
}

Далее создаем источники данных следующим образом:

source blog : site1 # создаем источник данных blog и наследуем параметры у источника данных site1
{
sql_query = SELECT b.id*10+1, 1 as source_id, CONCAT_WS('(*_!_*)',b.title, b.text, CONCAT('/blog/',c.alias,'/',b.alias)) as data FROM blog as b \
LEFT JOIN blog_categories AS c ON b.catid = c.id

sql_attr_uint = source_id
sql_field_string = data
}

 

Пояснения к source blog:

sql_query  - выборка из таблицы данных, которые проиндексируются и в последующем по которым будет осуществляться поиск (перенос строки осуществляется символом \ )
b.id*10+1 - так мы задаем уникальный идентификатор для записи
1 as source_id - позже при выборке данных, по source_id мы будем определять источник данных
sql_attr_uint    = source_id - при выборке (поиске) source_id будет возвращаться в php.
sql_field_string = data - чтобы после поиска не делать еще один запрос в базу на выборку данных по найденым id. Грубо говоря data вернется в php после поиска (для каждого найденного значения). Затем его надо будет распарсить в массив так: explode('(*_!_*)', $result['data']);


Создаем индекс:

index siteSearch # название индекса (при запросе из php будет указываться вместо таблицы)
{
source = blog # источник данных (их может быть и несколько)

path = /home/bardata/web/bar-data.com/sphinx/data/siteSearch # где хранить данные по индексу
docinfo = extern
dict = keywords
mlock = 0
morphology = stem_en, stem_ru
min_stemming_len= 2
min_word_len = 1
html_index_attrs= img=alt,title; a=title;
html_strip = 1
preopen = 1

min_infix_len = 3
index_exact_words = 1
}

Все параметры индекса описывать буду по мере необходимости. В любом случае описание можно найти в интернете.

Добавим еще:

indexer
{
mem_limit = 1024M # ставим меньше или больше в зависимости от Вашего железа
}

Ну и последняя секция (есть еще и не обязательные секции):

searchd
{

listen = 127.0.0.1:9313:mysql41 # подключение к sphinx, где 9313 порт который не занят.

log = /home/site1/web/site1/sphinx/log/site1_searchd.log
query_log = /home/site1/web/site1/sphinx/log/site1_query.log
read_timeout = 5
client_timeout = 300
max_children = 30
persistent_connections_limit = 30
pid_file = /home/site1/web/site1/sphinx/sphinx_bardata.pid
seamless_rotate = 1
preopen_indexes = 1
unlink_old = 1
mva_updates_pool = 1M
max_packet_size = 8M
max_filters = 256
max_filter_values = 4096
max_batch_queries = 32
workers = threads # for RT to work
binlog_path = # disable logging
}

Самое главное, пропишите Ваши пути в log, query_log, pid_file!

Ключевым является то, чтобы каждый раз не писать настройки подключения к бд для каждого последующего источника данных "source".

Конфигурационный файл sphinx.conf лежит в папке пользователя/сайта, что позволяет использовать sphinx для разных сайтов на одном сервере! 

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

index siteSearch
{
source = blog
source = categories
source = items
...
...
}

У каждого источника данных используемого в одном индексе, должно быть одинаковое кол-во возвращаемых полей, а так же их названия должны быть одинаковыми! Иначе получим ошибку:

ERROR: index 'youindex': attribute count mismatch (me=source1, in=source2, myattrs=1, inattrs=3). # или похожую

Помните, если Вы создаете больше одного источника данных, генерируйте для их уникальные id. Например id*10+1 и для каждого последующего id*10+2...3...4 и т.д.

Для удаления индекса sphinx просто удалите секцию с индексом (если файлы для хранения не удалились, то и их удалите)!

Если у Вас валится вот такая ошибка:

bind() failed on 127.0.0.1, retrying...

Смените порт в searchd  -> listen конфигурационного файла!

Если получаем ошибку:

FATAL: failed to lock '/var/lib/sphinxsearch/data/binlog.lock': 11 'Resource temporarily unavailable'

Добавьте в секцию searchd параметр:

binlog_path = # disable logging

Ошибка должна уйти.

Если мы получаем ошибки вида:

WARNING: key 'enable_star' was permanently removed from Sphinx configuration. Re fer to documentation for details.

Вместо enable_star может быть и другой параметр, это значит что параметр устарел и его лучше не использовать. Как решение, просто удалите его из конфигурационного файла.

Если мы получаем ошибку:

ERROR: malformed or unknown option near '....sphinx.conf'.

Вы забыли указать --config перед конфигурационным файлом. Пример: searchd --config /home/...../sphinx.conf

 

Вот те ошибки которые я повстречал в процессе настройки sphinx. Так же будет очень полезно почитать настройку демона для sphinx.

 

Все.

comments powered by HyperComments