Итак, начинаю серию топиков по прикручиванию поисковой машины Sphinx к нашему любимому движку.
0 Что есть Sphinx и с чем его едят
Сфинкс является системой полнотекствого поиска, распространяемой под лицензией GPL второй версии.
Сфинкс позволяет добавить функции быстрого полнотекстового поика в сторонние приложения и был специально спроектирован для взаимодействия с реляционными базами данных и скриптовыми языками программирования. На данный момент движок позволяет индексировать данные, хрянящиеся в базах данных MySQL, PostgreSQL или в любом другом формате через XML-шлюз.
1 Установка
Топаем по ссылке и скачиваем себе файл с исходниками последней версии Sphinx-а. Актуальной, на данный момент, является версия 0.9.8.1, взять которую можно здесь.
Распаковываем архив стандартной командой (
tar zxf /path/to/SphinxSourceFile.tar.gz
), переходим в новый каталог sphinx и выполняем «волшебную последовательность» (
./configure; make; make install
).
Для успешной сборки Сфинкса в системе должны быть установлены и доступны текущему пользователю:
* компилятор С++ (вполне подойдет стандартный из коллекции компиляторов GNU)
* программа make, например, из набора GNU
Если есть необходимость указать какие-нибудь опции компиляции, например, путь до библиотеки MySQL или пути для установки, то передаем их конфигурационному скрипту. Префикс «по-умолчанию» зависит от вашей системе (в *BSD — /usr/local..., а в разных Linux-ах по разному, но велика вероятность, что конфиги лягут в /etc/sphinx, а бинарники в /usr/local/bin). Для простоты дальнейшего повествования, предположим, что конфиги у вас будут лежать в каталоге /usr/local/sphinx/etc, а бинарники в /usr/local/sphinx/bin.
На этом этап установки завершен.
2 Настройка
Для начала стоит сказать, что конфигурация поисковой машины Сфинкс оперирует двумя фундаментальными параметрами:
* Источник (source) — описание объектов индексируемых данных, параметры доступа к ним и указание поисковой машине аттрибутов данных, их типов и правил их анализа.
* Индекс (index) — хранилище индекса данных, описанных в источнике (да, тавтология :) ). В качестве данных, хранимых в индексе, указывается ранее описанный источник.
Исходя из написанного выше, для настройки Сфинкса на индексацию базы данных Живой Улицы, нам необходимо описать источники и индексы. В данном топике будет приведен пример конфигурационного файла с индексами комментариев и топиков. Расширенную настройку каждый сможет провести самостоятельно, в зависимости от требований проекта.
Со сфинксом поставляется конфигурационный файл по-умолчанию, однако он нам не пригодиться. При первичной настройке Вы можете воспользоваться моим, который приведен ниже. Однако учтите, что в нем необходимо прописать параметры доступа к базе данных и пути до каталогов, в которых будут храниться индексы.
Настройка автозапуска поискового демона при старте системы
Для осуществления того, что написано в заголовке раздела, необходимо в один из стартовых скриптов системы, например, /etc/rc.local для ОС Linux вставить код:
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
/usr/local/sphinx/bin/indexer --all
, однако данный способ является сильно неоптимальным, поскольку топики обновляются (точнее появляются новые) значительно реже, нежели комментарии, поэтому частоту обновления индекса комментариев должны быть больше.
Для различной частоты индексации объектов разного типа, в планировщик необходимо добавить следующие инстукции:
(означает индексацию топиков каждые 3 часа с запуском процесса на 12ой минуте часа и индексацию комментариев каждые 50 минут)
3 Пример конфигурационного файла
## Конфигурационный файл Sphinx-а для индексации Живой улицы
#######################
#
# Описываем индексы
#
#######################
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
type = mysql
sql_host = your_database_host
sql_user = your_database_login
sql_pass = your_database_password
sql_db = your_database_name
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 = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
# Тип хранения аттрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировака данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
docinfo = extern
mlock = 0
morphology = stem_enru, soundex, metaphone
charset_type = utf-8
}
#######################
#
# Настройки индексатора
#
#######################
indexer
{
# Лимит памяти, который может использавать демон-индексатор
mem_limit = 32M
}
#######################
#
# Настройка демона-поисковика
#
#######################
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 = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/log/sphinx/searchd.pid
}
215 комментариев
хоть так делать не хорошо, но всетаки подниму топик в Эфир
ну когда я тестировал свой модуль (который еще не до конца готов) — 6200 топиков+27000 комментариев. размер базы в бинарном виде около 150мб, сфинкс полностью обходил описанные источники за 27 секунд — порядка 10 секунд на все топики и около 17-18 на комментарии (видимо из-за большого их количества — количество запросов получается больше, записей в индексный файл больше и тп).
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'commentsIndex'...
collected 27546 docs, 6.1 MB
sorted 0.6 Mhits, 100.0% done
total 27546 docs, 6115398 bytes
total 4.352 sec, 1405054.70 bytes/sec, 6328.88 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=3446).
опция rotate указана для того, чтобы после переиндексации индексер послал поисковому демону сигнал на релоад индесных файлов.
Тут надо учитывать, что у меня (как и по-умолчанию) включена полная переиндексация каждый раз. Если настраивать дельта-индексы (только добавленные в базу записи), то будет знаааачительно быстрее.
итак, великодушный ОРТ откликнулся на мою просьбу и добавил необходимый функционал в эмбедед-модули ЖУ (сий функционал приехал в последнем коммите (№82) в транк). Всеобщее счастье близко как никогда:-)
Вопрос, что такое индексные файлы, и с чем их едят?
WARNING: index 'topicsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
да, эти каталоги необходимо создать самостоятельно. путь значения не имеет, но разумно их размещать вне дерева, доступного через веб чтобы выши индексы никто скачать не смог
сам не использовал, но пишут что nnCron (виндовая программа) — достаточно мощный планировщик, в него можно и засунуть вызов индексатора.
только в случае, если в момент индексации поисковый демон работает необходимо стартовать индексатор с параметром --rotate (чтобы индексер уведомил демона об обновлении индексов)
Также, запуск переиндексации всех индексов не оптимален, лучше запускать индексацию комментариев и постов в разное время с различными временными интервалами
в принципе разобралась как установить и таки установила! осталась 1 проблема.
1. при поступлении нового контента его сразу не индексирует, т.е. как в windows автоматизировать данный процесс. X:\sphinx\bin\indexer.exe --all
2. для windows индексации мало, нужен еще перезапуск поискового демона X:\sphinx\bin\searchd.exe
т.е. тоже не понятно как автоматизировать этот момент
3. если отключить поисковый демон и кто-то из посетителя в поиске начнёт что-то искать, сайт мягко говоря падает :)
Да, не индексирует. searchd ничего не знает о контенте, базе данных и тп, он работает только с предварительно созданными индексными файлами. indexer может уведомить searchd (по крайней мере в *nix системах точно может посылкой сигнала SIGHUP процессу searchd) о том, что файлы индексов необходимо перепрочитать (такой функционал включается запуском indexer-а с параметром --rotate)
Падать ничего не должно, должно выдаваться сообщение о технической ошибке.
Пытаюсь установить сфинкс, что то выдает ошибку, линуксоиды помогите пожалуйста чего не хватает? /cmslive.ru/sphinx-0.9.8.1/src/sphinx.h:617: undefined reference to `sphCreateSBCSTokenizer()'
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
такие ошибки появляются, когда линкер при линковсе отдельных объектных файлов не подцепляет какойто объект. в котором экспортируется функция, на которую ругается
Немного повозившись с ./configure эта ошибка исчезла, появилось другое: g++ -Wall -g -D_FILE_OFFSET_BITS=64 -O3 -DNDEBUG -o indexer indexer.o libsphinx.a -L/usr/local/mysql/lib -lmysqlclient -lz -lm -liconv -lexpat -L/usr/local/lib
/usr/bin/ld: cannot find -lmysqlclient
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
Люди помогите побороть вот это: cannot find -lmysqlclient Я так понял этой библиотеки нету, подскажите как ее поставить или может нужно установить libmysql-dev?
Установил, у меня бинарники в:
/usr/local/bin/indexer
/usr/local/bin/searchd
/usr/local/bin/search
/usr/local/bin/spelldump
Конфиги в: /usr/local/etc/sphinx.conf
/usr/local/etc/example.sql
Теперь никак не найду /etc/rc.local, похоже у меня его нет. Подскажите пожалуйста в какой еще стартовый файл можно прописать /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
ладно уже решил.
Теперь другая проблема
using config file '/usr/local/etc/sphinx.conf'…
indexing index 'topicsIndex'…
collected 161 docs, 0.3 MB
collected 328 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 161 docs, 274023 bytes
total 0.202 sec, 1355770.96 bytes/sec, 796.57 docs/sec
indexing index 'commentsIndex'…
collected 271 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 271 docs, 37276 bytes
total 0.041 sec, 918852.26 bytes/sec, 6680.14 docs/sec
[root@yanga etc]#
И не чего не ищет католог с индексами пустой(
Люди как проверить работает ли поиск? Вроде все установил, но ничего не ищет, пишет «Удивительно, но поиск не дал результатов». В конфиге прописал
# Источник, который будет хранить данный индекса
source = topicsSource
path = home/index
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /home/index
Каталог index вручную просто создал в папке home, но он пустой, что в нем должно быть?
Папку index через ftp просматриваешь?
у меня он тоже пустой) глянь на него через mc по ssh подключившись)
И демон запущен, а то может ты как и я забыл про него).
Просматриваю через mc подключившись через ssh, в папке выше index появились файлы index.spa, index.spd, index.sph...*spi,*spl, *spm, *spp. Выполняю usr/local/bin/indexer --all отвечает FATAL: failed to lock pid file '/var/log/searchd.pid': Resource temporarily unavailable (searchd already running?) У меня не было файла /etc/rc.local, я сам его создал и записал в него /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf Потом перезагрузил сервер… Пес его знает работает демон или нет, в linux я слабовато разбираюсь, как еще можно запустить демон кроме записи в rc.local и как проверить запущен ли он?
Работает)
Попробуй
остановить
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf --stop
и запусти
searchd --config /usr/local/etc/sphinx.conf
только пути свои пиши)
Сделал, вроде работает. Остался маленький нюанс, сначала поиск работал только по комментариям, по топикам не находил ничего, теперь наоборот в комментах не ищет, по топикам все находит. Что то я не так сделал:(
www# /configure; make; make install
/configure: Command not found.
Making all in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make all-am
Making all in test
Making install in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make install-am
test -z "/usr/local/bin" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/bin"
/usr/bin/install -c 'indexer' '/usr/local/bin/indexer'
/usr/bin/install -c 'searchd' '/usr/local/bin/searchd'
/usr/bin/install -c 'search' '/usr/local/bin/search'
/usr/bin/install -c 'spelldump' '/usr/local/bin/spelldump'
Making install in test
test -z "/usr/local/etc" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/etc"
/usr/bin/install -c -m 644 'sphinx.conf.dist' '/usr/local/etc/sphinx.conf.dist'
/usr/bin/install -c -m 644 'sphinx-min.conf.dist' '/usr/local/etc/sphinx-min.conf.dist'
/usr/bin/install -c -m 644 'example.sql' '/usr/local/etc/example.sql'
make install-data-hook
mkdir -p /usr/local/var/data && mkdir -p /usr/local/var/log
www#
спасибо за руководство, но у меня возникла проблема. Поставил, настроил. вроде работает, но поиск работает нормально только для комментариев. для поиска топиков пишет либо «еще никто не написал сюда», либо выдает какие то странные статьи, абсолютно не релевантные.
А как установить поиск?
Здесь же читал что в SVN есть встроенные средства, но установка кода в закоментированное поле ничего не дала.
Как установить SVN?
а если про мой, я то не понял 6))
как это расположить результаты поиска? ввод поискового запроса осуществляется на странице /search/. вывод результатов на ней же
help
все сделал по мануалу…
индексы топиков и коментов создаются в разных папках в виде .new.spa и т.д
Но поиск не работает. Пробую запустить демон руками
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
в ответ получаю
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: failed to open /var/sphinx/topics/.sph: No such file or directory; NOT SERVING
WARNING: index 'commentsIndex': preload: failed to open /var/sphinx/comments/.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve
В общем разобрался как на linux все это ставится.
— для индексов топиков и комментов сделал разные папки, какие и прописываем в sphinx.conf
— затем запускаем indexer --all
— затем планируем crontab
— затем прописываем демон в автозагрузку rc.local
— и только затем запускаем демон или ресетим сервер для загрузки демона с rc.local
Именно такая последовательность привела к положительному результату.
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: /srv/www/htdocs/index/top.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /srv/www/htdocs/index/com.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
ЭЭ. а чем отличается запуск MySQL на линуксе и бсд?
я думаю, что речь идет не о разнице в системе запуска сервисов (/usr/local/etc/rc.d/sName start+требование прописи сервиса в /etc/rc.conf в БСД и /etc/init.d/sName start в Линукс)? :)
Что хотел заметить, что с таким конфигом в результаты поиска попадают и закрытые топики/черновики.
И еще, не подскажите, в чем может быть проблема. С LS 1.2 мигрировал на версию из SVN. Сфинкс индексные файлы создает, вроде бы все ок. Конфиг взял kruft'а, но штука в том, что корректно ищет только по комментарием, в выдаче топиков совершенно не те топики, что нужно выводятся. Как можно попытатся отладить данную проблему?
Спасибо за статью, установил sphinx без особых проблем. Вот только не получается добавить источник — пользователи (people) для организации поиска по полям профиля пользователей.
конфиг:
<code>
# Источник пользователей
source peoplesSource : lsParentSource
{
sql_query = \
SELECT user_id, user_login, UNIX_TIMESTAMP(user_date_register) as user_date_register \
FROM prefix_user \
WHERE user_date_register>=$start AND user_date_last<=$end
sql_query_range = SELECT MIN(user_id),MAX(user_id) FROM prefix_user
sql_range_step = 5000
}
индекс пользователей
index peoplesIndex
{
# Источник, который будет хранить данный индекса
source = peoplesSource
path = /var/index/peoples/
# Тип хранения аттрибутов
docinfo = extern
mlock = 0
# Используемые морфологические движки
morphology = stem_enru, soundex, metaphone
# Кодировака данных из источника
charset_type = utf-8
# Из данных источника HTML-код нужно вырезать
html_strip = 1
}
</code>
sql_query и sql_query_range друг другу противоречат.
во втором запросе получаются минимальное и максимальное значения атрибута, по которому будет разбиваться процесс индексации по шагам, а потом начинает выполняться 1ый запрос с подстановкой переменных start и end через заданный 3им свойством шаг.
Смотримс что согласно твоему конфигу получается:
1. получили минимальное и максимальное значение юзер_ид.
2. начали выполнять запрос
<code>SELECT user_id, user_login, UNIX_TIMESTAMP(user_date_register) as user_date_register \
FROM prefix_user \
WHERE user_date_register>=МИНИМУМ_ИЗ_ПЕРВОГО_ПУНКТА AND user_date_last<=МИНИМУМ+ШАГ(5000)</code>
.
потом переменные инкрементируются на значение шага (5000) и запрос выполняется снова. и тд до максимального значения юзер_ид.
Гениальная мысль: почему это указана разбивка по юзер_ид (что вообщем-то логично), но значения айдишников подставляются для сравнения с датой регистрации юзера в формате временной метки юникс (количество секунд, прошедшее с 1.01.1970г — число на данный момент сильно большое).
Логично предположить, что юзеров с регистрацией 1...5000...10000… сек на сайте, созданном в 2009 году быть не может :-), следовательно, 1ый запрос выдает 0 рядов результата. Отрабатывая при этом совершенно верно, как написано :-)
Резюме: в 1м запросе необходимо указать условие по user_id. Как переписать запрос для этого, я думаю, подсказывать нет необходимости =)
Попробовал поиграться с конфигом, пока без результатов. Мне нужен поиск по полям профиля пользователя (имя, обо мне, местоположение, дата регистрации, интересы и т.д). Может кто подскажет куда копать.
я думал, что в первом своем ответе расписал максимально подробно чего не так и что нужно сделать :-)
в твоем текущем конфиге надо всего-лишь написать первый запрос с условием WHERE user_id>=$start AND user_id<=$end вместо того, что сейчас написано.
ЗЫ: еще раз перечитал свой ответ предыдущий — всетаки то, что написано выше является единственным его следствием :-) Разве нет?
а закладку сделать очень просто — смотри текущий шаблон в папке ActionSearch. Естественно чтобы добавить поиск по полям профиля еще нужно дописать в модуле и экшене соответствующий функционал. но об этом в вопросе выше не было не слова.
вопрос был только про конфиг Сфинкса
у меня вопрос появился. как-то можно отключить сфинксовое выделение цветом? имею мнение, что это рвет ссылки. Или может быть можно както неучитывать ссылки в поиске?
помогите плз, застрял на этом(((
я не нашел (у меня у самого он родимый). он немного в принципе файлов раскидывает при make install — можно накатать по быстрому control-скрипт и собрать пакет. это будет единственно-верный debian way =)
Китайский! Никто не может ли доступно для чайника задокументировать процесс установки этого сфинкса, по пунктам?! Или, может, есть где-то такая инфа уже, как найти? Или никто для чайников расписывать не будет и нужно найти знающего чела, кто поставит этого Сфинкса?
Есть проблема при вхождении поискового запроса в параметры хтмл-тегов. Например, title изображений разрывается подсветкой и ещё начало тега обрезается, если параметре много текста.
Можно ли делать исключения, если обнаружено вхождение внутри тега и оборачивать спаном весь тег? И с обрезкой придумать что-то, чтобы теги помещались в результатах поиска целиком, а с ними — и их содержимое — картинки, встроенные плеерв и тд
У меня вот такая проблема возникает с сфинксом.
Все установил, настроил конфиг, проиндексировал.
При поиске ищет слово, и в результатах 3 топика 3 комментария,
а в списке топиков только 1 топик показывает.
При этом очень много слов, которые есть не находит.
В чем может быть проблема?
Господа! Требуется помощь. Значится мне хороший товарищ помог установить и настроить sphinx'а на сервере: «индекс живой. Всё работает. Абсолютно.». И да, папка баз индекса полна, демон работает, казалось бы, НО…
Я не перестаю «удивляться, что поиск не дал рез-тов». Подскажите, пожалуйста, как диагностировать, куда копать? Yuri25писал сначала о том же, а потом внезапно раааз… и всё у него заработало. Но он не сказал, как поборол.
Как впринципе ЛС снюхивается со Сфинксом? Куда посмотреть, где рыть? Заранее премного благодарен!
Товарищи. Объясните, пожалуйста, кто знает, логику работы морфологических движков, используемых Sphinx'ом. У меня на сайте установлен оный. Набираю запрос «е95», но получаю в результатах топики и с подсвеченными E55, и AH6. Как бы сделать так, чтобы почётче поиск работал? Т. е. склонения и падежи слов бы предлагались, а вот запросы с циферками выдавалибы однозначные рез-ты? Заранее спасибо!
Далее, в /usr/local/etc/sphinx.conf настроил как описано выше.
так как rc.local в папке etc нет, в freebsd запуск идёт через папку /usr/local/etc/rc.d/ в которой уже есть (возможно хостёр поставил) файл sphinxsearch, вот внутренности этого файла:
#!/bin/sh
#
# $FreeBSD: ports/textproc/sphinxsearch/files/sphinxsearch.sh.in,v 1.4 2008/04/27 08:50:49 miwi Exp $
#
# PROVIDE: sphinxsearch
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf to enable sphinxsearch:
#
# sphinxsearch_enable="YES"
#
# Other rc.conf variables:
#
# sphinxsearch_conffile="/usr/local/etc/sphinx.conf"
# -- path to config file
# sphinxsearch_pidfile="/var/run/sphinxsearch/searchd.pid"
# -- location of pidfile: must match setting
# in ${sphinxsearch_conffile}
# sphinxsearch_user="_sphinx"
# -- user to run searchd as
# sphinxsearch_group="_sphinx"
# -- group to run searchd as
# sphinxsearch_logdir="/var/log/sphinxsearch"
# -- directory searchd writes logs to
#
. /etc/rc.subr
name=sphinxsearch
rcvar=`set_rcvar`
load_rc_config ${name}
: ${sphinxsearch_enable="NO"}
: ${sphinxsearch_conffile="/usr/local/etc/sphinx.conf"}
: ${sphinxsearch_pidfile="/var/run/sphinxsearch/searchd.pid"}
: ${sphinxsearch_user="_sphinx"}
: ${sphinxsearch_group="_sphinx"}
: ${sphinxsearch_logdir="/var/log/sphinxsearch"}
command=/usr/local/sbin/searchd
pidfile=${sphinxsearch_pidfile}
required_files=${sphinxsearch_conffile}
start_precmd=sphinxsearch_prestart
sphinxsearch_prestart ()
{
piddir=$(dirname ${sphinxsearch_pidfile})
if [ ! -d ${piddir} ]; then
mkdir -m 755 -p ${piddir}
chown -R ${sphinxsearch_user}:${sphinxsearch_group} ${piddir}
fi
if [ ! -d ${sphinxsearch_logdir} ]; then
mkdir -m 755 -p ${sphinxsearch_logdir}
chown -R ${sphinxsearch_user}:${sphinxsearch_group} \
${sphinxsearch_logdir}
fi
}
case "${sphinxsearch_flags}" in
*--config\ *)
echo "Warning \$sphinxsearch_flags includes --config option." \
"Please use \$sphinxsearch_conffile instead."
;;
*)
sphinxsearch_flags="--config ${sphinxsearch_conffile} ${sphinxsearch_flags}"
;;
esac
run_rc_command "$1"
тут вот написано (http://www.citforum.ru/operating_systems/freebsd/handbook/configtuning-starting-services.shtml)
Замечание: Не записывайте свои команды в /etc/rc.conf. Для запуска демонов, или для выполнения вашей команды во время запуска — запишите ваш скрипт в /usr/local/etc/rc.d.
а у меня уже получается sphinxsearch там есть, кстати в нём есть закомментированная такая строчка
А ступил, извиняюсь, файлик этот есть, он на следующей странице был, значит прописал в него
sphinxsearch_enable=«YES»
, перезагрузил сервер, не работает. В общем походу не осилить мне это дело самому, прошу помощи, кто возьмётся настроить sphinx'a на FreeBSD, если кто этим зарабатывает, сразу ценник скажите. Спасибо.
Вчера пытались ставить — хостер прав не дает, но обещал поставить, если мы предоставим исходники и отправные данные для настройки.
Так вот вопрос — что именно хостеру передать надо для успешной настройки Sphinx'a?
Кто ставил, ответьте, пожалуйста, какие данные нужно знать, чтобы настроить модуль.
в пользу 2х демонов говорит отсутствие системы разделения доступа — любой клиент серчд может делать запросы к любым индексам, имеющимся в настройках свинкса
Ребята, напишите кто знает как настроить свинкс для поиска на нескольких сайтах на одном IP. Обращался к Лоре и Крафту, но они к сожалению помочь не имеют возможности.
При поиске выдает «Системная ошибка, повторите позже».
0. Прочитал все, что есть, однако, ответа не нашел.
1. Демон запущен, индексацию произвел.
2. Утилитка search находит результаты.
3. Вставил отладку в файл Sphinx.class.php. Результат возвращается.
Как решили проблему? Переустановка LS не вариант совсем.
Стоял сфинкс 0,9,8, все было норм. обновили до 0,9,9, перестал выдавать результаты и пишет — Системная ошибка, повторите позже.
Короче говоря, в первом случае оба атрибута, topic_publish и comment_delete передаются при поиске в каждом индексе. Ессно, тот или иной атрибут существует только в определенном индексе. В 0.9.8 такое прокатывало, в 0.9.9 видимо ужесточили проверку. Я воткнул простую проверку и передаю только нужные атрибуты (не очень красиво, но главное понять в чем проблема)
здесь проблема была в другом — при каждом виде поиска объект Sphinx был один и тот же, в итоге если искомое слово было и в топиках и в комментах, то это приводило к ошибке
а строка 24 файла ActionSearch.class.php ($this->Viewer_Assign('sAdminMail', SYS_MAIL_FROM_EMAIL);) — тоже не баг? (просто последние пол года в связи с занятостью плохо следил за развитием движка) — в смысле то, что константа а не конфиг-объект.
настроил я Sphinx, работает, наткнулся в поиске на свои собственные черновики ) причем я был не авторизирован на сейте… это нормально? кто знает как лечить? (версия 0.3.1)
Люди, кто знает как настроить свинкс для поиска на нескольких сайтах на одном IP. Обращался к Лоре и Крафту, но они к сожалению помочь не имеют возможности. Напишите пожалуйста, неужели никто не делал подобное?
да все просто — для этого даже есть функционал в дистрибе движка — в конфиге модуля Search установи для разных сайтов разные entity_prefix-ы и в конфиг Сфинкса добавь подобные с существующими сорсы и индексы.
типа source site1Topics и site2Topics. соответственно с префиксами site1 и site2. по-дефолту префикс пустой
source…: ...2 означает, что… берет все настройки (наследует) перечисленные в ...2.
таким образом, для первого сайта например, надо указать в конфиге ЛС site1_, для второго site2_.
а в конфиге сфинкса сделать site1_parentSource и site2_parentSource для второго соответственно.
и потом все разделы индексов и сорсов сделать типа site1_topicsSource: site1_parentSource и site2_topicsSource: site1_parentSource для 1го и 2го сайтов. аналогично для всех разделов source и index
Минимум второй раз за последнее время вижу этот спам про лазерные граверы (свежий топик про чудо любви). Попробовал поискать — выяснил, что поиск не находит слова внутри ссылок. Или это потому, что новый топик и ещё не успел проиндексироваться или что-то в этом духе?
правильно ли я понял, что если доступа к машине у меня нет — я его установить не смогу? у меня виртуальный хостинг… на счёт наличия там компилятора c++ и программы make крайне не уверен, да и судя по всему мне до них не добраться будет
У меня проблема такая: При выполнении indexer --all пишет:
FATAL: no indexes found in config file './sphinx.conf'
Т.е. он конфиг читает но не находит индексов. Вот код конфига:
source testing-index
{
type = mysql
sql_host = localhost
sql_user = user
sql_pass = 123
sql_db = search_test
sql_port = 3306
# main document fetch query
# mandatory, integer document ID field MUST be the first selected column
sql_query = SELECT id, header_ru, text_ru FROM category
sql_attr_uint = header_ru
sql_attr_uint = text_ru
# document info query, ONLY for CLI search (ie. testing and debugging)
# optional, default is empty
# must contain $id macro and must fetch the document by that id
sql_query_info = SELECT * FROM category WHERE id=$id
}
index testing-index
{
# document source(s) to index
# multi-value, mandatory
# document IDs must be globally unique across all sources
source = testing-index
# index files path and file name, without extension
# mandatory, path must be writable, extensions will be auto-appended
path = d:/webservers/home/sphinx/index
# document attribute values (docinfo) storage mode
# optional, default is 'extern'
# known values are 'none', 'extern' and 'inline'
docinfo = extern
# memory locking for cached data (.spa and .spi), to prevent swapping
# optional, default is 0 (do not mlock)
# requires searchd to be run from root
mlock = 0
# morphology = stem_en, stem_ru, soundex
morphology = stem_en
# minimum indexed word length
# default is 1 (index everything)
min_word_len = 1
charset_type = utf-8
html_strip = 1
stopwords = d:\webservers\home\sphinx\stop_words.txt
}
Здравствуйте!
Понравился поиск на Хабрахабре и решил поставить Sphinx.
Пока пробовал ставить на локальной машине где Denwer.
На ПК стоит Windows 7 64.
В этой статье не всё понятно ( для меня недостаточно подробно), делал паралельно по этой инструкции с видео.
— скачал Sphinx версии Win64 binaries w/MySQL support 2.0.6-release.
— розпаковал в папку на C:\sphinx
— отредактировал файл config
— создал в Mysql тестовую базу данных
И на этапе (в этой статье вроде «Настройка автозапуска поискового демона при старте системы») в видео на 15:55 мин у меня такая ошибка, скрин.
Подскажите, пожалуйста что не так
Включаете в свойстах консоли мышку, копируете в гугл и ищете ответ — наверняка есть.
А вообще давно пора понять что под винду никто ничего не делает и поддержка работы этого ПО иключительно для популяризации.
Installing service…
FATAL: OpenSCManager() failed: code=5, error=╬Єърчрэю т фюёЄєях.
Нашел в Google
Так понял что нужно от имени администратора вводить в cmd. Перевоначально я и так вводил с профиля админа. Пишут что «нажмите правой кнопкой мыши на запуске cmd», запустил уже так.
И получилось!
Спасибо beauty_free!
А вообще давно пора понять что под винду никто ничего не делает и поддержка работы этого ПО иключительно для популяризации.
Много лет пользуюсь виндой. Гду-то раз в 2 года переустанавливаю. Линукс не более 10 минут в работе наблюдал. Не могу сказать что-то хорошее про него или плохое
Это что-то… По тестовой базе данных ищет, но сам сервис Sphinx не запускается, пишет ошибка 1067 (именно где сервисы Windows). В групе vk.com/sphinxsearch ответа на вопрос нет.
Решил поставить 32 битную версию, начал удалять SphinxSearch service как здесь описано, но только начинаю что-либо вводить окно пропадает. Видео
Подскажите, пожалуйста!
Поставил sphinx-2.0.6-release-win32, процес работает!
Вероятно, нужно будет на Ubuntu все же ставить. Там так же или сложней чем на виндовс?
А как сделать чтоб как на habrahabr в результатах поиска было разделение — темы, комментарии, люди?
Как минимум сделать разные конфиги сфинкса и при запуске демона и индексатора указывать --config=/путь/до/конфига.
Ну и в конфигах самих задать разные сокеты или tcp-порты, на которых будет висеть демон.
Не выйдет запустить 2 сервера с разными конфигами.
Надо в один конфиг вместить индексирование нескольких баз данных.
Все это можно сделать, читайте документацию и задавайте на форумах вопросы.
Возможно ли в один конфиг уместить правила для обоих сайтов или Сфинкс так не рабоатет? Если кто-то имеет опыт настройки для нескольких сайтов пожалуйста отзовитесь.
215 комментариев
есть какая-нибуть статистика применимо к лайвстриту?
это я делал на старом сервере, недавно сильно обновил сервер (память в 4 раза увеличил) и проц сильно шустрее.
Результаты:
server:~# indexer --rotate topicsIndex
Sphinx 0.9.8-release (r1371)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'topicsIndex'...
collected 4951 docs, 20.4 MB
collected 3165 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 1.6 Mhits, 100.0% done
total 4951 docs, 20369103 bytes
total 14.478 sec, 1406895.17 bytes/sec, 341.97 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=3446).
server:~# indexer --rotate commentsIndex
Sphinx 0.9.8-release (r1371)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'commentsIndex'...
collected 27546 docs, 6.1 MB
sorted 0.6 Mhits, 100.0% done
total 27546 docs, 6115398 bytes
total 4.352 sec, 1405054.70 bytes/sec, 6328.88 docs/sec
rotating indices: succesfully sent SIGHUP to searchd (pid=3446).
опция rotate указана для того, чтобы после переиндексации индексер послал поисковому демону сигнал на релоад индесных файлов.
Тут надо учитывать, что у меня (как и по-умолчанию) включена полная переиндексация каждый раз. Если настраивать дельта-индексы (только добавленные в базу записи), то будет знаааачительно быстрее.
т.е. можно и чаще индексировать, раз все так быстро происходит
топик перенес с техдок
В общем ясно, там свой апи:)
попросил вчера кое-что добавить в ядро ЖУ. если добавит. то выложу модуль очень быстро
Вопрос, что такое индексные файлы, и с чем их едят?
WARNING: index 'topicsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /home/webmaster/sphinx/index.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
для создания индексов нужно запустить: indexer --all
# Источник, который будет хранить данный индекса
source = topicsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
и
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = ПУТЬ/ДО/КАТАЛОГА/ИНДЕСА
эти каталоги нужно вручную создать? и если да, то в папке с сайтом или више сайта?
Самый простой способ запустить индексацию — это выполнить или добавить в планировщик команду
/usr/local/sphinx/bin/indexer --all
как автоматизировать в windows данный процесс?
только в случае, если в момент индексации поисковый демон работает необходимо стартовать индексатор с параметром --rotate (чтобы индексер уведомил демона об обновлении индексов)
Также, запуск переиндексации всех индексов не оптимален, лучше запускать индексацию комментариев и постов в разное время с различными временными интервалами
1. при поступлении нового контента его сразу не индексирует, т.е. как в windows автоматизировать данный процесс. X:\sphinx\bin\indexer.exe --all
2. для windows индексации мало, нужен еще перезапуск поискового демона X:\sphinx\bin\searchd.exe
т.е. тоже не понятно как автоматизировать этот момент
3. если отключить поисковый демон и кто-то из посетителя в поиске начнёт что-то искать, сайт мягко говоря падает :)
Падать ничего не должно, должно выдаваться сообщение о технической ошибке.
using config file './sphinx.conf'…
WARNING: key 'address' is deprecated in ./sphinx.conf line 140; use 'listen' ins
tead.
WARNING: key 'port' is deprecated in ./sphinx.conf line 144; use 'listen' instea
d.
indexing index 'topicsIndex'…
collected 12 docs, 0.0 MB
collected 14 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 12 docs, 1637 bytes
total 0.095 sec, 17222.10 bytes/sec, 126.25 docs/sec
indexing index 'commentsIndex'…
collected 16 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 16 docs, 245 bytes
total 0.057 sec, 4300.16 bytes/sec, 280.83 docs/sec
total 8 reads, 0.0 sec, 12.0 kb/read avg, 0.0 msec/read avg
total 16 writes, 0.0 sec, 0.3 kb/write avg, 0.2 msec/write avg
WARNING: failed to scanf pid from pid_file 'x:\sphinx\log\searchd.pid'.
WARNING: indices NOT rotated.
{
# Адрес, на котором будет прослушиваться порт
address = 127.0.0.1
# Ну и собственно номер порта демона searchd
port = 3312
# Лог-файл демона
log = x:\sphinx\log\searchd.log
# Лог поисковых запросов. Если закомментировать, то логировать поисковые строки не будет
query_log = x:\sphinx\log\query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 30
# Файл, в который сохраняется PID-процесса при запуске
pid_file = x:\sphinx\log\searchd.pid
}
файл никакие не создались для ведения логов
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
/usr/bin/ld: cannot find -lmysqlclient
*** Error code 1
Stop in /путь/cmslive.ru/sphinx-0.9.8.1/src.
*** Error code 1
Люди помогите побороть вот это: cannot find -lmysqlclient Я так понял этой библиотеки нету, подскажите как ее поставить или может нужно установить libmysql-dev?
Установил, у меня бинарники в:
/usr/local/bin/indexer
/usr/local/bin/searchd
/usr/local/bin/search
/usr/local/bin/spelldump
Конфиги в: /usr/local/etc/sphinx.conf
/usr/local/etc/example.sql
Теперь никак не найду /etc/rc.local, похоже у меня его нет. Подскажите пожалуйста в какой еще стартовый файл можно прописать /usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
ERROR: section contents: expected token, got '=' in /usr/local/etc/sphinx.conf line 140 col 30.
140 строка это = 127.0.0.1
Что с этим делать?
Теперь другая проблема
using config file '/usr/local/etc/sphinx.conf'…
indexing index 'topicsIndex'…
collected 161 docs, 0.3 MB
collected 328 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 161 docs, 274023 bytes
total 0.202 sec, 1355770.96 bytes/sec, 796.57 docs/sec
indexing index 'commentsIndex'…
collected 271 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 271 docs, 37276 bytes
total 0.041 sec, 918852.26 bytes/sec, 6680.14 docs/sec
[root@yanga etc]#
И не чего не ищет католог с индексами пустой(
.spi .spm
но пишет что поиск не дал результатов
# Источник, который будет хранить данный индекса
source = topicsSource
path = home/index
# Индекс комментариев
index commentsIndex
{
source = commentsSource
path = /home/index
Каталог index вручную просто создал в папке home, но он пустой, что в нем должно быть?
у меня он тоже пустой) глянь на него через mc по ssh подключившись)
И демон запущен, а то может ты как и я забыл про него).
найдет демона, если он запущен :)
Попробуй
остановить
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf --stop
и запусти
searchd --config /usr/local/etc/sphinx.conf
только пути свои пиши)
You can now run 'make' to build Sphinx binaries,
and then run 'make install' to install them.
перевод:
«Теперь Вы можете для начала сборки Сфинкса запустить команду make и затем make install для его установки»
www# /configure; make; make install
/configure: Command not found.
Making all in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make all-am
Making all in test
Making install in src
if test -d ../.svn; then svn info .. --xml | perl svnxrev.pl; fi;
make install-am
test -z "/usr/local/bin" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/bin"
/usr/bin/install -c 'indexer' '/usr/local/bin/indexer'
/usr/bin/install -c 'searchd' '/usr/local/bin/searchd'
/usr/bin/install -c 'search' '/usr/local/bin/search'
/usr/bin/install -c 'spelldump' '/usr/local/bin/spelldump'
Making install in test
test -z "/usr/local/etc" || /home/loragt/data/sphinx-0.9.8.1/config/install-sh -d "/usr/local/etc"
/usr/bin/install -c -m 644 'sphinx.conf.dist' '/usr/local/etc/sphinx.conf.dist'
/usr/bin/install -c -m 644 'sphinx-min.conf.dist' '/usr/local/etc/sphinx-min.conf.dist'
/usr/bin/install -c -m 644 'example.sql' '/usr/local/etc/example.sql'
make install-data-hook
mkdir -p /usr/local/var/data && mkdir -p /usr/local/var/log
www#
что дальше?
разные индексы и сорсы, а в модуле изменить схему именования индексов при обращении к сфинксапи
Здесь же читал что в SVN есть встроенные средства, но установка кода в закоментированное поле ничего не дала.
Как установить SVN?
а по установке — в поиск по сайту
404 не дремлет))
как это расположить результаты поиска? ввод поискового запроса осуществляется на странице /search/. вывод результатов на ней же
help
все сделал по мануалу…
индексы топиков и коментов создаются в разных папках в виде .new.spa и т.д
Но поиск не работает. Пробую запустить демон руками
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
в ответ получаю
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: failed to open /var/sphinx/topics/.sph: No such file or directory; NOT SERVING
WARNING: index 'commentsIndex': preload: failed to open /var/sphinx/comments/.sph: No such file or directory; NOT SERVING
FATAL: no valid indexes to serve
Куда копать?
ну и ессно сначала требуется провести индексацию indexer-ом, иначе searchd не запустится, т.к. файлов еще не будет…
— для индексов топиков и комментов сделал разные папки, какие и прописываем в sphinx.conf
— затем запускаем indexer --all
— затем планируем crontab
— затем прописываем демон в автозагрузку rc.local
— и только затем запускаем демон или ресетим сервер для загрузки демона с rc.local
Именно такая последовательность привела к положительному результату.
а у меня
/usr/local/bin/searchd --config /usr/local/etc/sphinx.conf
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
creating server socket on 127.0.0.1:3312
WARNING: index 'topicsIndex': preload: /srv/www/htdocs/index/top.sph is invalid header file (too old index version?); NOT SERVING
WARNING: index 'commentsIndex': preload: /srv/www/htdocs/index/com.sph is invalid header file (too old index version?); NOT SERVING
FATAL: no valid indexes to serve
подскажите в чем беда?
ПыСы: странно, что кулХацкер, т.е. крутой хакерюга, не понял простого сообщения на английском, чиста конкретно хацкерском языке (:
Спасибо, все заработало, просто мне надо было внимательнее быть, а не сидеть и тупить после 5 литров пива ;)))
Получаю ошибку и никак не могу понять в чем дело?
на
/usr/local/sphinx/bin/indexer --all
получаю:
Sphinx 0.9.8.1-release (r1533)
Copyright © 2001-2008, Andrew Aksyonoff
using config file '/usr/local/etc/sphinx.conf'...
indexing index 'topicsIndex'...
collected 60 docs, 0.3 MB
collected 24 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
ERROR: index 'topicsIndex': failed to create /srv/www/htdocs/index/top.sph: Is a directory.
total 60 docs, 271819 bytes
total 0.140 sec, 1940095.46 bytes/sec, 428.25 docs/sec
indexing index 'commentsIndex'...
collected 61 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
ERROR: index 'commentsIndex': failed to create /srv/www/htdocs/index/com.sph: Is a directory.
total 61 docs, 4054 bytes
total 0.010 sec, 405400.01 bytes/sec, 6100.00 docs/sec
animalgrad:/srv/www/htdocs/sphinx #
Тебе же на чистом английском написали:
ERROR: index 'topicsIndex': failed to create /srv/www/htdocs/index/top.sph: Is a directory.
top.sph — это директория.
Покажи кусок конфига, где прописаны пути сохранения индексов на диск.
я думаю, что речь идет не о разнице в системе запуска сервисов (/usr/local/etc/rc.d/sName start+требование прописи сервиса в /etc/rc.conf в БСД и /etc/init.d/sName start в Линукс)? :)
пьяная башня… незаметила разницы, и долго материлась…
но потом поняла ошибку и была жестоко наказана, и ошибка была исправленна
и почему это лучше делать?
безопасность?
И еще, не подскажите, в чем может быть проблема. С LS 1.2 мигрировал на версию из SVN. Сфинкс индексные файлы создает, вроде бы все ок. Конфиг взял kruft'а, но штука в том, что корректно ищет только по комментарием, в выдаче топиков совершенно не те топики, что нужно выводятся. Как можно попытатся отладить данную проблему?
конфиг:
во втором запросе получаются минимальное и максимальное значения атрибута, по которому будет разбиваться процесс индексации по шагам, а потом начинает выполняться 1ый запрос с подстановкой переменных start и end через заданный 3им свойством шаг.
Смотримс что согласно твоему конфигу получается:
1. получили минимальное и максимальное значение юзер_ид.
2. начали выполнять запрос
.
потом переменные инкрементируются на значение шага (5000) и запрос выполняется снова. и тд до максимального значения юзер_ид.
Гениальная мысль: почему это указана разбивка по юзер_ид (что вообщем-то логично), но значения айдишников подставляются для сравнения с датой регистрации юзера в формате временной метки юникс (количество секунд, прошедшее с 1.01.1970г — число на данный момент сильно большое).
Логично предположить, что юзеров с регистрацией 1...5000...10000… сек на сайте, созданном в 2009 году быть не может :-), следовательно, 1ый запрос выдает 0 рядов результата. Отрабатывая при этом совершенно верно, как написано :-)
Резюме: в 1м запросе необходимо указать условие по user_id. Как переписать запрос для этого, я думаю, подсказывать нет необходимости =)
Гениальная догадка:
Еще ведь нужно добавить закладку сюда:
в твоем текущем конфиге надо всего-лишь написать первый запрос с условием WHERE user_id>=$start AND user_id<=$end вместо того, что сейчас написано.
ЗЫ: еще раз перечитал свой ответ предыдущий — всетаки то, что написано выше является единственным его следствием :-) Разве нет?
вопрос был только про конфиг Сфинкса
помогите плз, застрял на этом(((
Сегодня от хостера получил такой вот ответ
ЗЫ: сменить хостера не предлагать :)
С чего начать?
распаковываете их в домашнюю директорию и в папке с исходниками
разве что депендисы бы указать не мешало бы.
Можно ли делать исключения, если обнаружено вхождение внутри тега и оборачивать спаном весь тег? И с обрезкой придумать что-то, чтобы теги помещались в результатах поиска целиком, а с ними — и их содержимое — картинки, встроенные плеерв и тд
Все установил, настроил конфиг, проиндексировал.
При поиске ищет слово, и в результатах 3 топика 3 комментария,
а в списке топиков только 1 топик показывает.
При этом очень много слов, которые есть не находит.
В чем может быть проблема?
Я не перестаю «удивляться, что поиск не дал рез-тов». Подскажите, пожалуйста, как диагностировать, куда копать?
Yuri25
Как впринципе ЛС снюхивается со Сфинксом? Куда посмотреть, где рыть? Заранее премного благодарен!
насчет способа все-в-одном-конфиге я буду ковырять в ближайшее время
А вот если конфиг подправите и выложите буду пробовать
/usr/local/bin/indexer
/usr/local/bin/search
/usr/local/sbin/searchd
Далее, в /usr/local/etc/sphinx.conf настроил как описано выше.
так как rc.local в папке etc нет, в freebsd запуск идёт через папку /usr/local/etc/rc.d/ в которой уже есть (возможно хостёр поставил) файл sphinxsearch, вот внутренности этого файла:
Может что-то в нём надо прописать?
Тогда надо просто в /usr/local/etc/rc.conf вставить строчку
и с этого момента будет автозапускаться СФинкс.
тут вот написано (http://www.citforum.ru/operating_systems/freebsd/handbook/configtuning-starting-services.shtml)
а у меня уже получается sphinxsearch там есть, кстати в нём есть закомментированная такая строчка , может раскомментировать?
failed to open pid_file '/var/log/sphinx/searchd.pid'.
WARNING: indices NOT rotated.
После ручного запуска с консоли /usr/local/bin/searchd — все начинает нормально индексироваться.
Подскажите пожалуйста куда прописать для автозапуска, чтобы после перезагрузок работало. Спасибо.
/usr/local/binsearchd
[offtop]Кстати, ты не тестировал бету 0.9.9? Там какие то странные глюки бывают с поиском :)[/offtop]
борщеарчевода. Не было печали, апдейтов накачали XDТак вот вопрос — что именно хостеру передать надо для успешной настройки Sphinx'a?
Кто ставил, ответьте, пожалуйста, какие данные нужно знать, чтобы настроить модуль.
Ну и сам searchd в автозапуск
=))
/usr/bin/searchd --config /путь_к_конфигу/config.conf
0. Прочитал все, что есть, однако, ответа не нашел.
1. Демон запущен, индексацию произвел.
2. Утилитка search находит результаты.
3. Вставил отладку в файл Sphinx.class.php. Результат возвращается.
Что-то не донастроил? Куда капнуть? =)
Спасибо, kruft за помощь. Вместе нашли решение :)
Стоял сфинкс 0,9,8, все было норм. обновили до 0,9,9, перестал выдавать результаты и пишет — Системная ошибка, повторите позже.
В чем тут косяк может быть?
в Sphinx.class.php
меняем на
Короче говоря, в первом случае оба атрибута, topic_publish и comment_delete передаются при поиске в каждом индексе. Ессно, тот или иной атрибут существует только в определенном индексе. В 0.9.8 такое прокатывало, в 0.9.9 видимо ужесточили проверку. Я воткнул простую проверку и передаю только нужные атрибуты (не очень красиво, но главное понять в чем проблема)
из конфига модуля Серч:
— как я понимаю, и как написано в исходниках модуля, элемент с ключем entity_prefix также должен лежать в массиве $config['sphinx']
нужно прописать для другого сайта другие настройки для доступа к другой базе данных.
Не понял что означает в первой строке
и здесь
Допустим я прописал в конфиге модуля search для первого сайта так:
Куда теперь прописать site1 в сорсы и индексы?
таким образом, для первого сайта например, надо указать в конфиге ЛС site1_, для второго site2_.
а в конфиге сфинкса сделать site1_parentSource и site2_parentSource для второго соответственно.
и потом все разделы индексов и сорсов сделать типа site1_topicsSource: site1_parentSource и site2_topicsSource: site1_parentSource для 1го и 2го сайтов. аналогично для всех разделов source и index
FATAL: no indexes found in config file './sphinx.conf'
Т.е. он конфиг читает но не находит индексов. Вот код конфига:
меня интересует в частности индексер чтобы проиндексировать, но во фряхе такого пути нет "/usr/local/sphinx/bin/indexer"
При запуске:
indexer -c sphinx/etc/sphinx.conf --rotate --all
Выдает ошибку:
[17] => WARNING: access denied to PID 26058.
[18] => WARNING: indices NOT rotated.
В какую сторону копать?
using config file '/usr/local/etc/sphinx.conf'…
ERROR: inherited section 'topicsSource': parent doesn't exist (parent name='lsParentSource', type='source') in /usr/local/etc/sphinx.conf line 45 col 1.
FATAL: failed to parse config file '/usr/local/etc/sphinx.conf'
sphinx.conf -копи/паст
Нужно поставить Sphinx.
Киев.
Понравился поиск на Хабрахабре и решил поставить Sphinx.
Пока пробовал ставить на локальной машине где Denwer.
На ПК стоит Windows 7 64.
В этой статье не всё понятно ( для меня недостаточно подробно), делал паралельно по этой инструкции с видео.
— скачал Sphinx версии Win64 binaries w/MySQL support 2.0.6-release.
— розпаковал в папку на C:\sphinx
— отредактировал файл config
— создал в Mysql тестовую базу данных
И на этапе (в этой статье вроде «Настройка автозапуска поискового демона при старте системы») в видео на 15:55 мин у меня такая ошибка, скрин.
Подскажите, пожалуйста что не так
А вообще давно пора понять что под винду никто ничего не делает и поддержка работы этого ПО иключительно для популяризации.
Так понял что нужно от имени администратора вводить в cmd. Перевоначально я и так вводил с профиля админа. Пишут что «нажмите правой кнопкой мыши на запуске cmd», запустил уже так.
И получилось!
Спасибо beauty_free!
Решил поставить 32 битную версию, начал удалять SphinxSearch service как здесь описано, но только начинаю что-либо вводить окно пропадает. Видео
Подскажите, пожалуйста!
Вероятно, нужно будет на Ubuntu все же ставить. Там так же или сложней чем на виндовс?
А как сделать чтоб как на habrahabr в результатах поиска было разделение — темы, комментарии, люди?
Ну и в конфигах самих задать разные сокеты или tcp-порты, на которых будет висеть демон.
Цитирую хостера:
Возникла проблема, много материалов, окло 80 тыс.
ввожу в поиск /search/topics/?q=adobe
3366 Топиков находит
Нажимаю последняя страницы выдает ошибку
Подскажите люди добрые куда копать, не понимаю в чем беда