Get Social

Установка и настройка sphinx на centos 5

Эта информация подойдёт для sphinx версий 2.0.9 и ниже (также sphinx 1.x).
Если вам нужно установить и настроить версию 2.2.x (2.2.11, например), тогда смотрите здесь >>

[1] Инсталляция sphinx на centos 5

Где искать информацию?

Как всегда – сначала смотрим, что есть в поиске по запросу “установка sphinx на centos”.
Открываем несколько вкладок и работаем. Ну и конечно же, смотрим официальную документацию (http://sphinxsearch.com/docs)
yum search sphinx
yum install sphinx
cat /etc/redhat-release
CentOS release 5.9 (Final)

wget http://sphinxsearch.com/files/sphinx-2.0.9-1.rhel5.i386.rpm
yum --nogpgcheck localinstall sphinx-2.0.9-1.rhel5.i386.rpm

rpm -Uvh sphinx-2.0.9-1.rhel5.i386.rpm
ошибка: Неудовлетворенные зависимости:
libmysqlclient.so.15 нужен для sphinx-2.0.9-1.rhel5.i386
libmysqlclient.so.15(libmysqlclient_15) нужен для sphinx-2.0.9-1.rhel5.i386

иду на http://sphinxsearch.com/docs/current.html#installing
wget http://sphinxsearch.com/files/sphinx-2.0.9-release.tar.gz

cd sphinx-2.0.9-release
./configure
make

libsphinx.a(sphinx.o): In function `xmlUnknownEncoding':
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22846: undefined reference to `libiconv_open'
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22864: undefined reference to `libiconv'
/root/install/sphinx-2.0.9-release/src/sphinx.cpp:22870: undefined reference to `libiconv_close'
collect2: выполнение ld завершилось с кодом возврата 1

Как побороть ошибку “collect2: ld completed with a return code 1” ?

замена:
LIBS = -lexpat -ldl -lm -lz -L/usr/local/lib -lrt -lpthread
на
LIBS = -lexpat -liconv -ldl -lm -lz -L/usr/local/lib -lrt -lpthread
помогла!

make
make install

[2] Настройка sphinx на centos 5

на всякий случай скопируем оригинальные конфиги:
cd /usr/local/etc
cp -i sphinx-min.conf.dist sphinx-min.conf.dist.copy
cp -i sphinx.conf sphinx.conf.copy

настроим конфигурацию под свою базу данных
nano /usr/local/etc/sphinx.conf

создадим папки, перечисленные в конфиге (иначе получим ошибки… 🙂 )
mkdir /home/user/sphinx_data/
mkdir /var/log/sphinx/

запускаем процесс
searchd --config /usr/local/etc/sphinx.conf

проверим, что служба на нужных портах работает
lsof -i tcp:9312
lsof -i tcp:9306

проверим, что создались лог-файлы:
ls -lh /var/log/sphinx/

Полезные команды для службы поиска sphinx

создать индекс:
indexer --config /usr/local/etc/sphinx.conf --all

обновить индекс:
indexer --config /usr/local/etc/sphinx.conf --rotate

тест поиска в консоли:
search -q --config /usr/local/etc/sphinx.conf -a 123
или проще:
search -q 123
Для того, чтобы использовать поиск на сайте, нужно использовать Sphinx API для PHP.
Это библиотека, поставляемая вместе с дистрибутивом. Находим, где он лежит:
locate sphinxapi.php
<?php
.....
// Подключаем sphinx-api
require_once ("sphinxapi.php");
.....
?>

Добавим в крон ротацию каждые 15 минут (путь indexer указываем полный, так как крон обычно не в курсе, где искать исполняемые файлы):
*/15 * * * * /usr/local/bin/indexer --config /usr/local/etc/sphinx.conf --rotate > /dev/null 2>&1

[3] Как сделать, чтобы при перезагрузке стартовал searchd (sphinx)?

1) Красивый метод – как описано в статье.

2) Простой метод – в кроне каждую минуту проверять, запущен ли searchd и запускать, в случае необходимости. Критерий – проверка существование pid-файла:
* * * * * if [ ! -f /var/log/sphinx/searchd.pid ]; then /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf; fi > /dev/null 2>&1

 

Update, 21.12.2016: Эти настройки Sphinx подходят для версий 1.x, чтобы узнать, как поставить и настроить версии Sphinx 2.x читайте: Установка Sphinx 2.2.11 на Debian и CentOS, а также настройка в Yii