Установка Sphinx в Windows или операция Denwer :)

Долгими мучениями удалось одолеть этого мощного демона :)
Буду показывать по своим примерам, а вы уже используете под свои нужды

1. Качаем версию Sphinx для Windows
2. Cоздаём папку sphinx в C:\server\ в итоге получаем C:\server\sphinx\
3. Распаковываем из скаченного архива всё в неё
4. Pдесь же сразу (C:\server\sphinx\) создадим 2 папки index и log
Папка index будет хранить файлы, которые проиндексирует Sphinx, а папка log – логи работы Sphinx
5. Далее в денвере или в вашем MySQL ищем файлик libmysql.dll и копируем его в C:\server\sphinx\bin\
Можно еще в C:\windows и C:windows\system32
Главное, чтобы версия этого файлика была одинаковая. В принципе первого варианта достаточно
6. Создаём конфиг файл в папке C:\server\sphinx\bin\
Имя файла можно произвольное но я выбрала такое sphinx.conf
С содержанием:
## Конфигурационный файл Sphinx-а для индексации Живой улицы

#######################
#
# Описываем индексы
#
#######################

# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = root
        sql_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_bool           = 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_topic_comment \
                        WHERE comment_id>=$start AND comment_id<=$end

        sql_query_range         = SELECT MIN(comment_id),MAX(comment_id) FROM prefix_topic_comment
        sql_range_step          = 5000

        sql_attr_bool           = comment_delete
        sql_attr_timestamp      = comment_date
}

#######################
#
# Описываем индексы
#
#######################

index topicsIndex
{
        # Источник, который будет хранить данный индекса
        source                  = topicsSource
        path                    = C:/server/sphinx/index/topics

        # Тип хранения аттрибутов
        docinfo                 = extern

        mlock                   = 0

        # Используемые морфологические движки
        morphology              = stem_enru, soundex, metaphone

        # Кодировака данных из источника     
        charset_type            = utf-8


        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
}

# Индекс комментариев
index commentsIndex
{
        source                  = commentsSource
        path                    = C:/server/sphinx/index/comments

        docinfo                 = extern

        mlock                   = 0

        morphology              = stem_enru, soundex, metaphone

        charset_type            = utf-8
}

#######################
#
# Настройки индексатора
#
#######################


indexer
{
        # Лимит памяти, который может использавать демон-индексатор
        mem_limit                       = 32M
}

#######################
#
# Настройка демона-поисковика
#
#######################

searchd
{
address				= 127.0.0.1
	# address				= 192.168.0.1


	# searchd TCP port number
	# mandatory, default is 3312
	port				= 3312

        # Лог-файл демона
        log                                     = C:/server/sphinx/log/searchd.log

        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = C:/server/sphinx/log/query.log

        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5

        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 30

        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = C:/server/sphinx/log/searchd.pid
}


Теперь установим демон в качестве службы. Настоятельно не рекомендую это делать через ваши виртуальные диски которые создал денвер! Делайте всё из корневого диска «С»

7. Запускаем Far Manager или CMD кому как удобно
переходим в папку C:\server\sphinx\bin\
и пишем: searchd.exe --install --config C:\server\sphinx\bin\sphinx.conf

жмём enter и сфинкс установлен.
Примечание! Обязательно указать полный путь к конфиг файлу или же Windows потом напрочь откажется запускать демона как службу!

8. Пуск ->Настройка->Панель управления->Администрирование->Службы
В списке находим и запускаем.

Теперь при каждом запуске Windows демон сам будет стартовать

Теперь нам осталось позаботиться об индексации через промежутки времени
Для этого качаем программа nnCron для Windows
Программа на русском языке и для бывшего СССР бесплатная регистрация

После установки nnCron добавляем ей задания
Например индексация всего контента сайта (топики, комментарии)

C:\server\sphinx\bin\indexer.exe --rotate --all

--rotate передаст обновлённые данные демону без его перезагрузки!

если хотим топики отдельно индексировать через 2 часа например а комменты каждые 20 минут можно задать два задания так:

C:\server\sphinx\bin\indexer.exe --rotate topicsIndex

C:\server\sphinx\bin\indexer.exe --rotate commentsIndex

и в планировшике указать интервал выполнения задачи.

Примечание! Не рекомендую планировщику задавать задания через виртуальные диски, которые создал денвер — он их не выполнит!

Примечание 2. Демон нужно именно установить как службу и ЗАПУСТИТЬ! Иначе можно конечно через фар запускать и будет работать, НО:

Если демон запущен как служба он создаёт лог файлы и важный файл PID, через который он сообщается с индексатором без перезагрузки!
А если запустить просто фаром, то демон приодеться постоянно перегружать в ручную, чтобы он понял чего от него хотят :)

Спасибо за внимание.

23 комментария

avatar
вау, плюсанул!
чтобы служба запускалась автоматически, можно высставить ей соответствующий уровень запуска (в ее свойствах)
avatar
отличное пособие :)
  • ort
  • +1
avatar
особенно приятно видеть, что использован мой конфиг и совет «покурить» в сторону использования nncron
avatar
Вообще вместо nnCron можно обойтись и sheldued tasks («назначенные задания») в Windows.
avatar
nnCron лучше :)
avatar
«кошерней» :))
avatar
Здравствуйте! Проблема с запуском сервиса…



Действовал по инструкции, в конфиге убрал C:/server/sphinx/ и заменил на C:/sphinx/ так что с конфигом все ок. Путь до файла конфигурации тоже прописан верно. В чем еще может быть проблема?
avatar
Важное дополнение к вашему мануалу:
перед запуском сервиса нужно запускать indexer --all
avatar
запустил. спасибо
avatar
так получилось запустить? у меня такая же проблема (
avatar
Мне нужно прикрутить сфинкс к WIKIMEDIA. Мне нужно править запросы в кофиге или нет?
avatar
Помогите новичку, не могу запустить службу :(
Скриншот
avatar
Та же самая ситуация — ошибка запуска службы пробовал путь и в кавычках и без кавычек — не помогает…
avatar
отписались бы кто как решил данный вопрос с ошибкой 1067.
  • job
  • 0
avatar
## Конфигурационный файл Sphinx-а для индексации LiveStreet
 
#######################
#
# Описываем индексы
#
#######################
 
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = ***
        sql_pass        = ***
        sql_db          = ***
        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                    = C:\xampp\sphinx\index\topics
 
        # Тип хранения аттрибутов
        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                    = C:\xampp\sphinx\log\comments
 
        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                                     = C:\xampp\sphinx\log\searchd.log
 
        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = C:\xampp\sphinx\log\query.log
 
        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5
 
        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 100
 
        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = C:\xampp\sphinx\log\searchd.pid
}
  • job
  • 0
avatar
Камрадден, есть такое мнение, что
prefix_
нужно поменять на твои реальные префиксы в БД
avatar
разрулил ли кто ошибку 1067
avatar
у меня тоже есть проблема с ошибкой 1067. конфиг правильный, индексатор из фара запускается. служба не запускается.
помогите пожалуйста. вот конфиг

## Конфигурационный файл Sphinx-а для индексации Живой улицы

#######################
#
# Описываем индексы
#
#######################

# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа 
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = root
        sql_pass        = 
        sql_db          = joomla_vm
        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 `id`, `fulltext`  FROM `jos_content`

        # запрос для дробления получения топиков на неколько итераций
        #sql_query_range         = SELECT MIN(`id`),MAX(`id`) FROM `jos_content`
        
        # сколько получать объектов за итерацию
        sql_range_step          = 1000

        
        # Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
        #sql_attr_bool           = topic_publish

        # Атрибут даты добавления, типа "время"
        sql_attr_timestamp      = created

        # мульти-аттрибут "теги топика"
        #sql_attr_multi  = uint tag from query; SELECT topic_id, topic_tag_id FROM prefix_topic_tag

        sql_ranged_throttle     = 0
}



#######################
#
# Описываем индексы
#
#######################

index topicsIndex
{
        # Источник, который будет хранить данный индекса
        source                  = topicsSource
        path                    = E:/program filez/denwer/sphinx/index/topics

        # Тип хранения аттрибутов
        docinfo                 = extern

        mlock                   = 0

        # Используемые морфологические движки
        morphology              = stem_enru, soundex, metaphone

        # Кодировака данных из источника     
        charset_type            = utf-8


        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
}



#######################
#
# Настройки индексатора
#
#######################


indexer
{
        # Лимит памяти, который может использавать демон-индексатор
        mem_limit                       = 32M
}

#######################
#
# Настройка демона-поисковика
#
#######################

searchd
{
address                         = 127.0.0.1
        # address                               = 192.168.0.1


        # searchd TCP port number
        # mandatory, default is 3312
        port                            = 3312

        # Лог-файл демона
        log                                     = E:/program filez/denwer/sphinx/log/searchd.log

        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = E:/program filez/denwer/sphinx/log/query.log

        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5

        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 30

        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = E:/program filez/denwer/sphinx/log/searchd.pid
}
avatar
Была проблема с ошибкой 1067, прописал команду indexer --all и вроде всё включилось, не понятно по поводу ннКрон что нужно сделать. Поиск на локалке не работает хотя всё установиолсь. Не пойму в чём дело.
avatar
У меня немного иначе:
Прописал indexer --all, работает, включаю процес — ошибка 1067
avatar
Спасибо за инструкцию.
Добавлю от себя, где возникли проблемы.
Т.к. на в последнем релизе Sphinx 0.9.9, изменился синтаксис в блоке searchd
address и port теперь
DEPRECATED, use listen instead
Номер порта тоже изменен.
Вместо:
address = 127.0.0.1
port  = 3312
используем:
listen = 127.0.0.1:9312

Ну и если у вас LS 5.1, нужно изменить имя таблицы коментарием в блоке commentsIndex с prefix_topic_comment на prefix_comment, где prefix — префикс таблиц БД sql_db
В topicsSource также указываем prefix_topic
avatar
Вай, мамадарагая скоко буков :) Интересно, и что это я у себя на денвере на пустом сайте искать буду?..
  • aex
  • 0
avatar
Ошибка 1067

Решение: Проверить наличие каталогов Sphinx/data и Sphinx/log, и создать их. Так же проверить права на запись
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.