Май 21 2010

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

Sphinx — поисковая машина. Абсолютно бесплатная. Sphinx достаточно активно используют некоторые вебмастера при создании своих сайтов. Установка из портов достаточно проста.

cd /usr/ports/textproc/sphinxsearch
make install clean

Перед сборкой появляется небольшой диалог опций.

┌────────────────────────────────────────────────────────────────────┐
│                  Options for sphinxsearch 0.9.9                    │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │     [X] MYSQL             MySQL support                        │ │
│ │     [ ] PGSQL             PostgreSQL support                   │ │
│ │     [X] ICONV             Iconv support                        │ │
│ │     [X] OPTIMIZED_CFLAGS  Use compiler optimization (-O3)      │ │
│ │     [X] ID64              use 64-bit document and word IDs     │ │
│ │     [ ] UNIXODBC          unixODBC support                     │ │
│ │                                                                │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│                       [  OK  ]       Cancel                        │
└────────────────────────────────────────────────────────────────────┘

Опции обеспечивают индексацию большого количества документов(ID64 позволяет пронумеровать большое число файлов), находящихся в базах MySQL, ICONV обеспечивает поддержку любых текстов в любых раскладках(это оптимистическое заявление).

Теперь переходим к настройке.
Sphinx состоит из 2-х компонент, из поисковика searchd и индексатора indexer.
То есть идея такая, индексатор набивает в поисковый кеш все со страниц или из базы, а к поисковику уже идут запросы на поиск, он ищет по этому поисковому кешу.
Настройка в принципе сводится к тому, что бы описать источники для индексатора.
К примеру для WordPress эта задача выглядит так(все настройки размещаются в конфигурационном файле /usr/local/etc/sphinx.conf):

source wordpress_src
{
        # Настройки подключения к MySQL
        type = mysql
        sql_host = localhost
        sql_user = wordpress
        sql_pass = wordpress-123
        sql_db = wordpress
        sql_port = 3306
 
        # Базы хранятся в UTF-8, выставляем кодовую страницу
        sql_query_pre = SET NAMES utf8
        sql_query_pre = SET CHARACTER SET utf8
 
        # Это запросы на получение данных из базы
        sql_query = SELECT ID as post_id, post_title, post_content FROM wp_posts WHERE post_type = 'post'
        sql_query_info = SELECT * FROM wp_posts WHERE ID = $id
        #Тут можно поставить время задержки, между запросами. Что бы снизить нагрузку на базу.
        sql_ranged_throttle = 0
}

Далее в этом же файле настраиваются поисковый индекс:

index wordpress_idx
{
        # Индексировать источник описанный ранее
        source = wordpress_src
 
        # Путь к файлам индекса
        path = /var/db/sphinxsearch/data/wordpress
 
        # Тип хранения индекса (none, inline, extern)
        docinfo = extern
 
        # Отключаем лочку памяти 
        mlock = 0
 
        # Использование английского и русского языка в поисковом потоке
        morphology = stem_enru
 
        # Минимальная длина индексируемого слова
        min_word_len = 2
 
        # Используем кодировку UTF-8
        charset_type = utf-8
 
        # Допустимые символы в поисковом кеше
        charset_table = 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F
 
        enable_star = 1
}

Для каждого источника, нужно будет описать свой индекс, ну и понятно сам источник. Некоторые создают поиск по комментариям, но мне кажется это перебор.
Теперь общие настройки, непосредственно индексатора и поисковика:

 
indexer
{
        # Лимит используемой памяти 
        mem_limit = 32M
}
 
searchd
{
        # Описываем, где поисковик будет принимать запросы
        address = 127.0.0.1
        port = 9312
 
        # Лог работы
        log = /var/log/sphinxsearch/searchd.log
 
        # Лог запросов
        query_log = /var/log/sphinxsearch/sphinx-query.log
 
        # Время чтения данных. 
        read_timeout = 5
 
        # Максимальное кол-во обслуживающих подпроцессов
        max_children = 30
 
        # Путь к pidу
        pid_file = /var/run/sphinxsearch/searchd.pid
 
        # Максимальное кол-во результатов
        max_matches = 1000
}

Остается чуть-чуть. Остается запустить поисковик, ну и сначала разрешить запуск:

echo 'sphinxsearch_enable="YES"' >>/etc/rc.conf
/usr/local/etc/rc.d/sphinxsearch start

И настроить работу индексатора. Индексатор запускается через крон. Как и насколько часто его запускать, зависит только от самого сайта. То есть, если сайт обнавляется раз в неделю, запускать индексатор раз в 5 минут безсмысленно. Опять же если у вас описано несколько источников, один из которых обновляется часто, запускать индексатор на все источники безсмысленно.
Поэтому для первого запуска индексатора используем:

indexer --all

И потом в кроне, допустим раз в сутки в 0 часов

0 0 * * * /usr/local/bin/indexer --all --rotate

Если нужно индексировать отдельный соурс, то это выглядит так:

*/5 * * * * /usr/local/bin/indexer --rotate wordpress_idx

Ну в общем, остается прикрутить поисковую форму к сайту, на wordpress это просто установкой и настройкой плугина.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть