Установка и настройка Sphinx

Установка

Тут все просто, заходим на оф. страницу http://sphinxsearch.com/downloads/release/ и скачиваю версию Debian 6.0.5 Squeeze x86_64 DEB, даже не смотря на то, что у меня debian wheezy

# dpkg --install sphinxsearch.deb

Важно: в данной статье мы рассмотрим ситуацию, когда мы является владельцем сервера, где только один сайт с одним типом поиска, поэтому нам не нужно несколько конфигурационных файлов для др. проектов.

Sphinx содержит две независимые программы indexer и searchd. Первый строит индексы по данным взятым из базы данных MySQL, второй производит поиск по построенном индексу.

Принцип работы:

  1. есть дефольный конфиг /etc/sphinxsearch/sphinx.conf , где прописываются Sourse и Indexes
  2. есть индексатор indexer который читает конфиг, берет Sourse и делает Indexes
  3. есть крон-лист заданий /etc/cron.d/sphinx в котором мы прописываем запуск индексатора и говорим с каким Sourse и Indexes работать

Для информации:

  • Домашний каталог Sphinx-а: /var/run/sphinxsearch
  • Стартовый конфиг Sphinx-а: /etc/default/sphinxsearch

Правим файл /etc/default/sphinxsearch и ставим START=yes

Создаю директорию, где будут хранится база Sphinx: /home/lebnik/sphinx с правами 777 (я создал пользователем под которым работаю - lebnik, не от рута)

Создаю файл настроек Источников и Индексов (см. выше п.1) и прописываю там свои правила (как это делать я опускаю, кому нужно спрашивайте в комментах)

# nano /etc/sphinxsearch/sphinx.conf

выполняю индексацию

# indexer --all

Пытаюсь запустить сфинкса и получаю ошибку:

# searchd
Sphinx 2.0.8-id64-release (r3831)
Copyright (c) 2001-2012, Andrew Aksyonoff
Copyright (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
{
        # дает возможность использовать SphinxQL
        listen = 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 config
        compat_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

Пожалуй, это достаточный минимум, чтобы понять как начать работать со сфинксом, всем удачки! 

Оцени публикацию:
  • 12,59
Оценили: 12
Теги : Sphinx, sphinxsearch, SphinxQL

Предложения и пожелания:

 

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Лебеденко Николай Николаевич
Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter