Вопрос к специалистам по sphinx
Требуется помощь специалистов по sphinx.
Ситуация следующая.
Установил все (где-то пол года назад) согласно инструкции в этом топике
Сразу после установки создал индекс, запустил, проверил, на сайте все прекрасно начало искаться.
И вот сегодня по прошествии полугода (поиском не пользовался или просто не обращался внимания) сегодня я выяснил, что он ищет только старые записи, т.е те, которые попали в индекс сразу после установки.
Ну я подумал, что проблема в заданиях, которые я поставил в крон, что они не срабатывают и индекс не обновляется
в кроне прописано
@hourly /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
@hourly /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
зашел через SSH, вручную проверил запущен ли Сфинкс, результат
далее запускаю
Специально зашел в лог файл запросов и там есть мои поисковые запросы через сайт.
Проблема в том, что вроде как индекс вручную обновил, делаю поиск со словом, которое есть в самом последнем посте — он ничего не находит.
Этот запрос в логе запросов к нему есть
в конфиге сфинкса явно все прописано нормально, иначе бы он вообще не работал, а он работает, но только по какому-то урезанному (старому индексу)
Зашел в папку с индексом — там лежат файлы сегодняшнего дня, т.е явно, что сработала команда на обновления индекса.
вопрос в том, почему он не находит мне записи по тем запросам, которые касаются новых постов, но находит старые записи?
P.S.
Что в строчказ в крону означается концовка
@hourly /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
@hourly /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
а именно
> /dev/null 2>&1
я в этом не сильно шарю
Через SSH работает (выдает листинг) только /usr/bin/indexer --rotate topicsIndex, т.е без концовки
Если ввести /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
то как будто отрабатывает, но ничего не выдает
P.P.S.
Приводу конфиг сфинкса чтобы тем, кто разбирается, проще было понять в чем проблема
в /congig/modules/search/config.php
прописано
Ситуация следующая.
Установил все (где-то пол года назад) согласно инструкции в этом топике
Сразу после установки создал индекс, запустил, проверил, на сайте все прекрасно начало искаться.
И вот сегодня по прошествии полугода (поиском не пользовался или просто не обращался внимания) сегодня я выяснил, что он ищет только старые записи, т.е те, которые попали в индекс сразу после установки.
Ну я подумал, что проблема в заданиях, которые я поставил в крон, что они не срабатывают и индекс не обновляется
в кроне прописано
@hourly /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
@hourly /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
зашел через SSH, вручную проверил запущен ли Сфинкс, результат
/etc/init.d/sphinxsearch start
Starting sphinxsearch: /usr/bin/searchd already running.
далее запускаю
/usr/bin/indexer --all --rotate
Sphinx 0.9.9-release (r2117)
Copyright © 2001-2009, Andrew Aksyonoff
using config file '/etc/sphinxsearch/sphinx.conf'...
indexing index 'topicsIndex'...
collected 343 docs, 0.5 MB
collected 557 attr values
sorted 0.0 Mvalues, 100.0% done
sorted 0.0 Mhits, 100.0% done
total 343 docs, 499289 bytes
total 0.148 sec, 3361015 bytes/sec, 2308.94 docs/sec
indexing index 'commentsIndex'...
collected 270 docs, 0.1 MB
sorted 0.0 Mhits, 100.0% done
total 270 docs, 77345 bytes
total 0.023 sec, 3239174 bytes/sec, 11307.47 docs/sec
total 5 reads, 0.000 sec, 54.6 kb/call avg, 0.0 msec/call avg
total 16 writes, 0.001 sec, 43.2 kb/call avg, 0.0 msec/call avg
rotating indices: succesfully sent SIGHUP to searchd (pid=7361).
Специально зашел в лог файл запросов и там есть мои поисковые запросы через сайт.
Проблема в том, что вроде как индекс вручную обновил, делаю поиск со словом, которое есть в самом последнем посте — он ничего не находит.
Этот запрос в логе запросов к нему есть
в конфиге сфинкса явно все прописано нормально, иначе бы он вообще не работал, а он работает, но только по какому-то урезанному (старому индексу)
Зашел в папку с индексом — там лежат файлы сегодняшнего дня, т.е явно, что сработала команда на обновления индекса.
вопрос в том, почему он не находит мне записи по тем запросам, которые касаются новых постов, но находит старые записи?
P.S.
Что в строчказ в крону означается концовка
@hourly /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
@hourly /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
а именно
> /dev/null 2>&1
я в этом не сильно шарю
Через SSH работает (выдает листинг) только /usr/bin/indexer --rotate topicsIndex, т.е без концовки
Если ввести /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
то как будто отрабатывает, но ничего не выдает
P.P.S.
Приводу конфиг сфинкса чтобы тем, кто разбирается, проще было понять в чем проблема
## Конфигурационный файл 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 ls_topic as t_fast, ls_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 ls_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 ls_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 ls_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 ls_comment
sql_range_step = 5000
sql_attr_uint = comment_delete
sql_attr_timestamp = comment_date
}
#######################
#
# Описываем индексы
#
#######################
index topicsIndex
{
# Источник, который будет хранить данный индекса
source = topicsSource
path = /var/lib/sphinxsearch/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/sphinxsearch/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
{
listen = localhost:3312
# Адрес, на котором будет прослушиваться порт
#address = 127.0.0.1
# Ну и собственно номер порта демона searchd
#port = 3312
# Лог-файл демона
log = /var/log/sphinxsearch/searchd.log
# Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
query_log = /var/log/sphinxsearch/query.log
# Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
read_timeout = 5
# Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
max_children = 100
# Файл, в который сохраняется PID-процесса при запуске
pid_file = /var/log/sphinxsearch/searchd.pid
}
в /congig/modules/search/config.php
прописано
$config['entity_prefix'] = '';
$config['sphinx']['host'] = 'localhost';
$config['sphinx']['port'] = '3312';
13 комментариев
* */1 * * * /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
* */1 * * * /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
0 * * * * /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1
0 * * * * /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
Спасибо за вопрос, узнал чего-то новое :)
Это значит «перевести stdout в никуда» (т.е. не выводить результаты работы команды)
Это значит «перевести stderr (поток 2) в stdout (поток 1)» (т.е. возможные ошибки направить не в отдельный поток вывода, а в стандартный. Но поскольку стандартный вывод уже направлен в null, ошибки тоже выводиться не будут)
с одной стороны видно, что поиск работает, а с другой, что он аналогичен результатам на сайте, т.е почему-то поиск идет по старым записям (новых в индексе, по которым он ищет — нет)
до добавления топика
collected 343 docs, 0.5 MB
после добавления
collected 344 docs, 0.5 MB
Видно, что количество топиков в его отчете — меняется. Только вот поиском по фразам последних постов — ни одного результата
Провел еще один тест — вручную удалил файлы индекса — поиск ес-но ничего не находил.
Полностью заново создал индекс, поиск заработал, но опять не правильно и опять не находит новых записей.
помимо того, что он все-таки не находит новых записей, он почему-то стал искать так.
Ввожу запрос — он мне выдает кучу топиков с результатами (топики до определенного момента, не новые).
Выбираю один результат, т.к он явно не релевантен, захожу на его страницу и вижу, что в тексте топика и комментах нет ключевого слова для поиска, однако он есть в блоках в сайдбаре.
С какой стати он вдруг выдает в результатах топики, которые не содержат указанного слова, но содержат его в сайдбаре? Как это возможно?
при последнем запуске выдал такое
Не совсем понял что ему не нравится, на что это влияет и как исправить
1. Поставил последнюю версию Sphinx (вероятно это и сыграло ключевую роль, как я думаб)
2. поправил запрос на создание индекса на тот, что вы привели в своем сегодняшнем топике
Результат — все ищет.
Единственное, что пока для меня осталось неясным — он при запуске пишет вот такое предупреждение
WARNING: compat_sphinxql_magics=1 is deprecated; please update your application and config
но ведь в конфиге этой опции нет, откуда это предупреждение?
версия у меня такая
searchd
Sphinx 2.0.6-id64-release (r3473)