Настройка и установка sphinx поиска для LiveStreet на FreeBsd

Чтобы запустить поиск на LiveStreet нужно сделать следующее
Для начала установим sphinx
cd  /usr/ports/textproc/sphinxsearch
make install clean 
rehash

Теперь идем править ему конфиг /usr/local/etc/sphinx.conf
Для LiveStreet можно взять его в папке install
Сразу даю 3 комментария к коду:
1. prefix_ меняется на префикс, который указывался при установки
2. sql_sock = /var/run/mysqld/mysqld.sock
это путь до сокета mysql, который задается в /etc/my.cnf, если не хочет коннектиться или вы не знаете где он у вас, то просто закоментируйте эту строчку в конфиге
3. не забудьте создать папку где хранить индексы (в конфиге это /var/lib/sphinx)
## Конфигурационный файл Sphinx-а для индексации LiveStreet
 
#######################
#
# Описываем индексы
#
#######################
 
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = user
        sql_pass        = pass
        sql_db          = livestreet
        sql_port        = 3306
        # Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
        # операции с БД происходили не через TCP/IP стек сервера)
        sql_sock        = /var/run/mysqld/mysqld.sock
   
       
        mysql_connect_flags     = 32 # 32- включение сжатие при обмене данными с БД
   
        # Включам нужную кодировку соединения и выключаем кеш запросов
        sql_query_pre                   = SET NAMES utf8
        sql_query_pre                   = SET SESSION query_cache_type=OFF    
}
 
# Источник топиков
source topicsSource : lsParentSource
{
        # запрос на получения данных топиков
        sql_query               = \
                SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM prefix_topic as t_fast, prefix_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
 
        # запрос для дробления получения топиков на неколько итераций
        sql_query_range         = SELECT MIN(topic_id),MAX(topic_id) FROM prefix_topic
       
        # сколько получать объектов за итерацию
        sql_range_step          = 1000
 
       
        # Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
        sql_attr_uint = topic_publish
 
        # Атрибут даты добавления, типа "время"
        sql_attr_timestamp      = topic_date_add
 
        # мульти-аттрибут "теги топика"
        sql_attr_multi  = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag
 
        sql_ranged_throttle     = 0
}
 
# Источник комментариев
source commentsSource : lsParentSource
{
        sql_query               = \
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM prefix_comment \
                        WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end AND comment_publish=1
 
        sql_query_range         = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_comment
        sql_range_step          = 5000
 
        sql_attr_uint = comment_delete
        sql_attr_timestamp      = comment_date
}
 
#######################
#
# Описываем индексы
#
#######################
 
index topicsIndex
{
        # Источник, который будет хранить данный индекса
        source                  = topicsSource
        path                    = /var/lib/sphinx/topicIndex
 
        # Тип хранения аттрибутов
        docinfo                 = extern
 
        mlock                   = 0
 
        # Используемые морфологические движки
        morphology = stem_enru
 
        # Кодировака данных из источника    
        charset_type            = utf-8
 
 
        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
        html_remove_elements = style, script, code
}
 
# Индекс комментариев
index commentsIndex
{
        source                  = commentsSource
        path                    = /var/lib/sphinx/commentsIndex
 
        docinfo                 = extern
 
        mlock                   = 0
 
        morphology = stem_enru
 
        charset_type            = utf-8
        
        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
        html_remove_elements = style, script, code
}
 
#######################
#
# Настройки индексатора
#
#######################
 
 
indexer
{
        # Лимит памяти, который может использавать демон-индексатор
        mem_limit                       = 128M
}
 
#######################
#
# Настройка демона-поисковика
#
#######################
 
searchd
{
        # Адрес, на котором будет прослушиваться порт
        address                         = 127.0.0.1
 
 
        # Ну и собственно номер порта демона searchd
        port                            = 3312
 
        # Лог-файл демона
        log                                     = /var/log/sphinx/searchd.log
 
        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = /var/log/sphinx/query.log
 
        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5
 
        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 100
 
        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = /var/log/sphinx/searchd.pid
}

Когда конфиг сохранен самое время запустить индексацию и поискового демона
indexer --all
searchd

Теперь осталось только прописать в /etc/crontab задания для периодической индексации топиков и комментов
Топики я поставил на каждый час, а комменты каждые полчаса, а чтобы мудни не было запускаю от рута
0 * * * *   root    /usr/local/bin/indexer --rotate topicsIndex > /dev/null 2>&1
*/30 * * * * root   /usr/local/bin/indexer --rotate commentsIndex > /dev/null 2>&1

Теперь на этом сайте есть полнотекстовый поиск.