Установка
Тут все просто, заходим на оф. страницу http://sphinxsearch.com/downloads/release/ и скачиваю версию Debian 6.0.5 Squeeze x86_64 DEB, даже не смотря на то, что у меня debian wheezy
# dpkg --install sphinxsearch.deb
Важно: в данной статье мы рассмотрим ситуацию, когда мы является владельцем сервера, где только один сайт с одним типом поиска, поэтому нам не нужно несколько конфигурационных файлов для др. проектов.
Sphinx содержит две независимые программы indexer и searchd. Первый строит индексы по данным взятым из базы данных MySQL, второй производит поиск по построенном индексу.
Принцип работы:
Для информации:
Правим файл /etc/default/sphinxsearch и ставим START=yes
Создаю директорию, где будут хранится база Sphinx: /home/lebnik/sphinx с правами 777 (я создал пользователем под которым работаю - lebnik, не от рута)
Создаю файл настроек Источников и Индексов (см. выше п.1) и прописываю там свои правила (как это делать я опускаю, кому нужно спрашивайте в комментах)
# nano /etc/sphinxsearch/sphinx.conf
выполняю индексацию
# indexer --all
Пытаюсь запустить сфинкса и получаю ошибку:
# searchdSphinx 2.0.8-id64-release (r3831)Copyright (c) 2001-2012, Andrew AksyonoffCopyright (c) 2008-2012, Sphinx Technologies Inc (http://sphinxsearch.com)using config file '/etc/sphinxsearch/sphinx.conf'...FATAL: failed to open log file '/usr/local/sphinx/var/log/searchd.log': No such file or directory
оказывается у меня в конфиге неправильно указаны пути к файлам логов и pid_file, исправляю конфиг
# nano /etc/sphinxsearch/sphinx.conf
после чего он выглядит так:
searchd{# дает возможность использовать SphinxQLlisten = localhost:3307:mysql41# Лог-файл демонаlog = /var/log/sphinxsearch/searchdLebnik.log# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будетquery_log = /var/log/sphinxsearch/queryLebnik.log# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннектаread_timeout = 5# Максимальное количество одновременно-обрабатываемых запросов. 0 означает без ограниченияmax_children = 30# Файл, в который сохраняется PID-процесса при запускеpid_file = /var/log/sphinxsearch/searchdLebnik.pid# чтобы не выдавало ошибку WARNING: compat_sphinxql_magics=1 is deprecated; please update your application and configcompat_sphinxql_magics = 0}
и теперь успешно запускаю сфинкса :
# searchd
но теперь получаю WARNING в конфиге, оказывается я указал неправильно путь к файлу wordforms (исправляю это).
Обратите внимание: searchd уже запущен, и если попытаться его снова запустить, то получим ошибку:
FATAL: failed to lock pid file '/var/log/sphinxsearch/searchdLebnik.pid': Resource temporarily unavailable (searchd already running?)
поэтому останавливаю сфинкса и снова включаю его:
# searchd --stop# searchd
...
listening on all interfaces, port=3307
listening on all interfaces, port=9306
...
все отлично, теперь проверим работу SphinxQL в консоли. Для этого подключаемся на порт, который слушается сфинксом (специально выше показал пару строк, которые возникнут, когда Вы запустите searchd):
# mysql -h 127.0.0.1 -P 3307
и выполняем запрос например:
mysql> show status;
Или например поиск фразы 'маша ела кашу' по индексу forumIndex:
mysql> SELECT *, WEIGHT() `weight` FROM forumIndex WHERE MATCH('маша ела кашу');
Более сложный запросы:
SELECT *, WEIGHT() `weight` FROM forumIndex WHERE MATCH('*маша ела*') ORDER BY WEIGHT() DESC
SELECT *, WEIGHT() `weight` FROM forumIndex WHERE MATCH('*маша*|*кашу*') ORDER BY WEIGHT() DESC, mySpecField ASC LIMIT 0, 10
Если все ок, то полезно будет знать о том, что можно произвести индексирование, не останавливая демон:
# indexer --rotate --all
А если нужно переиндексировать определенный индекс, например с именем forumIndex
# indexer --rotate forumIndex
Eще можно смотреть статус:
# searchd --status
Удостовериться, что демон работает можно так:
# ps ax | grep searchd
Пожалуй, это достаточный минимум, чтобы понять как начать работать со сфинксом, всем удачки!