Долгими мучениями удалось одолеть этого мощного демона :)
Буду показывать по своим примерам, а вы уже используете под свои нужды
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 минут можно задать два задания так:
и в планировшике указать интервал выполнения задачи.
Примечание! Не рекомендую планировщику задавать задания через виртуальные диски, которые создал денвер — он их не выполнит!
Примечание 2. Демон нужно именно установить как службу и ЗАПУСТИТЬ! Иначе можно конечно через фар запускать и будет работать, НО:
Если демон запущен как служба он создаёт лог файлы и важный файл PID, через который он сообщается с индексатором без перезагрузки!
А если запустить просто фаром, то демон приодеться постоянно перегружать в ручную, чтобы он понял чего от него хотят :)
Спасибо за внимание.
23 комментария
вау, плюсанул!
чтобы служба запускалась автоматически, можно высставить ей соответствующий уровень запуска (в ее свойствах)
Действовал по инструкции, в конфиге убрал C:/server/sphinx/ и заменил на C:/sphinx/ так что с конфигом все ок. Путь до файла конфигурации тоже прописан верно. В чем еще может быть проблема?
## Конфигурационный файл 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
}
у меня тоже есть проблема с ошибкой 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
}
Была проблема с ошибкой 1067, прописал команду indexer --all и вроде всё включилось, не понятно по поводу ннКрон что нужно сделать. Поиск на локалке не работает хотя всё установиолсь. Не пойму в чём дело.
Спасибо за инструкцию.
Добавлю от себя, где возникли проблемы.
Т.к. на в последнем релизе 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
23 комментария
чтобы служба запускалась автоматически, можно высставить ей соответствующий уровень запуска (в ее свойствах)
Действовал по инструкции, в конфиге убрал C:/server/sphinx/ и заменил на C:/sphinx/ так что с конфигом все ок. Путь до файла конфигурации тоже прописан верно. В чем еще может быть проблема?
перед запуском сервиса нужно запускать indexer --all
помогите пожалуйста. вот конфиг
Прописал indexer --all, работает, включаю процес — ошибка 1067
Добавлю от себя, где возникли проблемы.
Т.к. на в последнем релизе Sphinx 0.9.9, изменился синтаксис в блоке searchd
address и port теперь Номер порта тоже изменен.
Вместо: используем:
Ну и если у вас LS 5.1, нужно изменить имя таблицы коментарием в блоке commentsIndex с prefix_topic_comment на prefix_comment, где prefix — префикс таблиц БД sql_db
В topicsSource также указываем prefix_topic
Решение: Проверить наличие каталогов Sphinx/data и Sphinx/log, и создать их. Так же проверить права на запись