Привет.
Я тут на днях оформлял вики для корпоративного репозитория на тему правильного поднятия сфинкса и что делать при ошибках. Я не буду вдаваться в детали настройки, этого полно в сети и документации. Привожу общий порядок действий для установки и небольшой список самых распространённых проблем с их решениями.
Допустим, что у нас есть сервер, на который ранее не устанавливался sphinx, и мы хотим поставить версию 3.0.3 или выше.
Все манипуляции могут производиться любым системным пользователем (если не указано иное). В нашем примере мы сидим под пользователем user.
Установка
1) Качаем бинарники под свою ОСь: http://sphinxsearch.com/downloads/current/
2) Распечатываем из архива содержимое папки /bin в /usr/bin/ (с повышенными правами)
3) Готовим структуру файлов и папок для хранения твоих настроек, индексов и логов sphinx:
/home/user/sphinxdata/ # или любая удобная директория |- binlogs/ |- indexes/ |- logs/ | |- searchd.log # пустой файл | |- query.log # пустой файл | |- log.log # пустой файл |- searchd.pid # пустой файл |- sphinx.conf
4) Оформляем конфиг sphinx.conf. Образец лежит в скачанном тобой архиве в директории /etc.
5) Запускаем индексацию
indexer --all --rotate -c ~/sphinxdata/sphinx.conf
Вывод команды в этот раз будет выглядеть примерно так:
using config file '/home/user/sphinxdata/sphinx.conf'... indexing index 'index1'... collected 43010 docs, 3.5 MB sorted 0.3 Mhits, 100.0% done total 43010 docs, 3.521 Mb total 2.1 sec, 1.669 Mb/sec, 20383 docs/sec indexing index 'index2'... collected 91965 docs, 14.7 MB sorted 1.4 Mhits, 100.0% done total 91965 docs, 14.65 Mb total 7.4 sec, 1.990 Mb/sec, 12494 docs/sec WARNING: failed to open pid_file '/home/user/sphinxdata/searchd.pid'. WARNING: indices NOT rotated.
Индексация прошла почти успешно. Почти — потому что ротация не удалась, т.к. не запущен демон searchd (об этом говорят последние две строки). Это норма.
В файл searchd.pid будет записан идентификатор процесса демона. После успешной индексации утилита indexer считывает PID процесса searchd из этого файла и отправляет процессу сигнал, чтобы тот подцепил индекс.
Поскольку мы ещё не запускали searchd и он сейчас не работает, то и PID-а там нет, и ротация логов не произошла, потому что слать сигнал нечему — о том и говорят последние две строки.
Пожалуй, при первой индексации параметр —rotate можно даже не добавлять.
6) Вот теперь запускаем демона:
searchd -c ~/sphinxdata/sphinx.conf
Возможно, для этого придётся переходить в директорию ~/sphinxdata (об этом ниже). При успешном запуске будет примерно такой вывод:
using config file '/home/user/sphinxdata/sphinx.conf'... listening on all interfaces, port=9312 listening on all interfaces, port=9306 precaching index 'index1' rotating index 'index1': success precaching index 'index2' rotating index 'index2': success precached 2 indexes in 0.009 sec WARNING: No extra index definitions found in data folder
Демон на свободе и работает. Можно тестировать поиск. Как? Не знаю. У меня перед настройкой sphinx, как правило, уже развёрнут рабочий проект, поэтому я просто прямо на сайте вбиваю поисковый запрос.
УЧТИ! Строки ‘rorating’ будут видны только в том случае, если ты запускал индексацию при выключенном демоне. Когда он запустится индексы будут ротированы.
Если ты просто запускаешь демона со старыми индексами, то будут строчки в духе ‘precaching <…>: success’. Если нет даже ‘precaching’, то читай дальше.
ЧаВо
Тут описаны самые часто встречаемые ошибки и проблемы, которые могут возникнуть при работе со сфинксом.
ПРОБЛЕМА: вывод команды indexer выглядит так:
using config file '/home/user/sphinxdata/sphinx.conf'... indexing index 'index1'... ERROR: index 'index1': sql_connect: Access denied for user 'mysqluser'@'localhost' (using password: YES) (DSN=mysql://mysqluser:***@localhost:3306/database). total 0 docs, 0.0 Kb total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
ПРИЧИНА: указана не та БД, либо не те логин/пароль, либо пользователь не имеет прав на чтение таблиц БД. Короче, не удалось подключиться к БД.
РЕШЕНИЕ: верно указать все данные для подключения, проверить БД и права пользователя на чтение таблиц БД.
ПРОБЛЕМА: вывод команды indexer выглядит так:
using config file '/home/user/sphinxdata/sphinx.conf'... indexing index 'index1'... ERROR: index 'index1': sql_connect: failed to load libmysqlclient (or libmariadb) (DSN=mysql://mysqluser:***@localhost:3306/database). total 0 docs, 0.0 Kb total 0.0 sec, 0.0 Kb/sec, 0 docs/sec
ПРИЧИНА: не установлена (не найдена) библиотека libmysqlclient.so либо libmariadb.so
РЕШЕНИЯ:
apt-get install libmysqlclient-dev #debian yum install libmysqlclient-dev #centos
ПРОБЛЕМА: при запуске searchd возникает ошибка:
FATAL: failed to parse config file '/home/user/sphinxdata/sphinx.conf'
ПРИЧИНА: некорректный путь или имя файла конфига, который ты ему дал (параметр -c), либо ошибка в конфиге (в этом случае будет указано место ошибки в файле)
РЕШЕНИЕ: исправить путь к конфигу и ошибки в нём
ПРОБЛЕМА: вывод команды searchd выглядит так (нет ни строчек ‘rotating’, ни ‘precaching’):
WARNING: both 'sphinxdata' and config file '/home/user/sphinxdata/sphinx.conf' exist; using 'sphinxdata' folder no config file, using 'sphinxdata' folder... listening on all interfaces, port=9312 listening on all interfaces, port=9306 WARNING: No extra index definitions found in data folder
ПРИЧИНА: демон запущен, но конфиг не прочтён и индексы не подцепились. Почему тут оно так происходит мне в деталях неизвестно.
РЕШЕНИЕ: выполнить команды по порядку:
searchd --stop # завершаем демона вежливо killall searchd # убиваем все его процессы грубо (чтоб наверняка) rm -f ~/sphinxdata/sphinx.state* # мешают файлы sphinx.state и sphinx.state.new cd ~/sphinxdata # переходим в директорию сфинкса searchd -c sphinx.conf # запускаем заново - теперь должно заработать
ПРИМЕЧАНИЕ: Вообще, директория sphinxdata всегда создаётся в текущей рабочей директории при каждом запуске демона searchd (там, где вы находитесь в момент запуска).
Говорят, что нужно просто удалять папку sphinxdata и запускать с указанием параметра -c. Якобы, тогда всё заработает.
Этот совет может сработать для тех, кто уже ставил сфинкса, имеет свои старые конфиги, обновил сфинкса до версии 3.* и пытается ему эти конфиги скормить.
В рассматриваемом нами случае, мы пошли другим путём и наоборот стали использовать именно эту папку для наших конфигов и дел. Удалять нам её незачем в контексте данной статьи. Но если не сработает с первого раза, значит надо перейти внутрь sphinxdata и запускать оттуда (хотя в моих случаях работало сразу и без этого).
В любом случае, имей в виду такое поведение сфинкса.
ПРОБЛЕМА: поиск просто не работает
ПРИЧИНА: ты
РЕШЕНИЕ: проверить конфиг(и), запустить индексацию, перезапустить демона, следить за каждым WARNINGом, логами, ошибками, гуглить и искать решение, которое тут не описано.
Здравствуйте!
Есть ~5 Гб архив новостей в wordpress. Можно ли как-то интегрировать sphinx 3 с последней версией wordpress? Попадавшиеся плагины какие-то устаревшие.