Эта информация подойдёт для 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