|
|
|
|
|
|
|
|
|
|
Первая основная проблема состоит в том, что Sphinx выдает результаты только для администраторов. Это проблема имеет место только в версиях IPB 3.0.2 и более ранних. Решением было бы перейти на версии 3.0.3 или выше, но если это невозможно, быстрым решением будет запустить следующий запрос к базе данных:
update ibf_permission_index set authorized_users = NULL where authorized_users = ''
Возможно, вам придется изменить запрос, в соответствии с префиксом таблиц в вашей базе данных.
Затем обновите главные индексы Sphinx с помощью команды
/usr/local/bin/indexer --config /path/to/sphinx.conf --all --rotate
Используйте ваш путь к файлу sphinx.conf. Он должен позаботиться об этом.
Выполните поиск для тестовой проверки.
Нажмите на вкладки в верхней части результатов поиска для Пользователи, Помощь, Календарь, Блоги, Галерея, и т.д. (если они установлены). Получены ли результаты для какого-либо из этих элементов?
Если нет, то вполне вероятно, что Sphinx не работает на вашем сервере.
Войдите под суперпользователем и запустите команду
ps -A | grep searchd
Что-нибудь получилось ?
Вы должны получить подобный результат :
20723 pts/0 00:00:00 searchd
Цифры могут отличаться, в зависимости от ID процесса, однако, результат поиска должен быть показан. Если этого не произошло, запустите процесс, при помощи команды :
/usr/local/bin/searchd --config /path/to/sphinx.conf
Снова замените путь к файлу sphinx.conf на свой. Если вы получаете результаты по остальным пунктам, кроме сообщений, значит у вас проблемы с индексами сообщений. При установке Sphinx, в соответствии с инструкцией по этой ссылке, по умолчанию индексы формируются в /var/sphinx, поэтому перейдите в эту папку.
cd /var/sphinx
Выведите список содержимого данной директории.
ls -l
Вы должны видеть список файлов .spa, .spd, .sph, .spi, .spl, .spm and .spp. Такие как members_search_delta, members_search_main, core_search_main, core_search_delta и т.д. По одному на каждый модуль форума.
Нас интересует то, какой модуль не работает. Наиболее вероятно, что это модуль Форумы. Если вы используете IPB 3.0.2 или более ранние версии, проигнорируйте это, так как, вероятно, что о вашей проблеме рассказывается далее. Авторизуйтесь под администратором и посмотрите на полученные результаты.
Модуль форумов разделен на 2 раздела: темы и сообщения, начиная c версии 3.0.3. Итак, у вас должно быть 7 различных файлов для каждого из следующих:
forums_search_posts_main forums_search_posts_delta forums_search_topics_main forums_search_topics_delta
Если у вас есть какие-либо другие файлы, например, forums_search_main и forums_search_delta, индексы которых были прочитаны, значит, это и привело к проблеме. Данные файлы, вероятно, были созданы cron задачей. Вам нужно удалить файлы forums_search_main и forums_search_delta, обновить cron задание и в течении 15 минут forums_search_delta будет преобразован в forums_search_topics_delta и forums_search_posts_delta, затем перестройте индексы с помощью команды
/usr/local/bin/indexer --config /path/to/sphinx.conf --all --rotate
Затем прервите процесс sphinx, найдя id процесса при помощи команды
ps -A | grep searchd
Обратите внимание на число, возвращаемое в последнем и предыдущих примерах
20723 pts/0 00:00:00 searchd
в нашем примере это число 20723. Таким образом, вам необходимо запустить команду
kill -9 20723
чтобы удалить процесс.
Теперь, вам необходимо заново запустить sphinx, выполнив
/usr/local/bin/searchd --config /path/to/sphinx.conf
После этого работа sphinx должна быть восстановлена.
Мы переходим к ядру. Это в основном устраняет любые потенциальные проблемы. На самом деле это не занимает много времени, и охватывает все базы, поэтому все проблемы должны быть устранены.
Если у вас IPB 3.0.2 или более ранние версии, выполните запрос в АЦ→Поддержка→Инструменты управления SQL, данный шаг не требуется для версий IPB 3.0.3 и выше:
update ibf_permission_index set authorized_users = NULL where authorized_users = '';
Затем закройте sphinx
ps -A | grep searchd
Найдите ID процесса и удалите его (как это сделать смотрите выше).
Перейдите в директорию, которая содержит индексы sphinx и удалите все эти файлы. Все, что были 'search'. Таким образом *search* должен быть удален. Далее отредактируйте ваш кронтаб и убедитесь в его правильности. ЭТО ВАЖНО.
Начиная с IPB 3.0.3, он должен читать как минимум
0 4 * * * /usr/local/bin/indexer –config /path/to/sphinx.conf –all –rotate Обратите внимание, что это forums_search_posts_delta и forums_search_topics_delta, НЕ включая forums_search_delta.
Для IPB 3.0.2 и более ранних версий, он должен читать как минимум
0 4 * * * /usr/local/bin/indexer –config /path/to/sphinx.conf –all –rotate Обратите внимание, что это forums_search_delta, НЕ включая forums_search_topics_delta и forums_search_posts_delta.
Далее перезапустите мастер индексации, используя команду
/usr/local/bin/indexer --config /path/to/sphinx.conf --all
В конце перезапустите сам sphinx командой
/usr/local/bin/searchd --config /path/to/sphinx.conf
Это полное перестроение всех данных Sphinx. В зависимости от размера вашего форума, для перестроения индексов может потребоваться некоторое время, но если вы все сделаете правильно, то это практически гарантирует устранение всех проблем.
Изучив немного Sphinx, вы сможете просматривать логи. Вы, конечно, не увидите все внутренние действия, но сможете увидеть некоторые внешние действия.
В папке логов sphinx, по умолчанию это /var/sphinx/log, вы найдете файлы query.log и searchd.log.
Файл query.log содержит информацию о том, что, где и когда искал пользователь, в том числе, сколько времени занял поисковый запрос. Если вы запустите команду
tail -f query.log
из директории /var/sphinx/log, то вы сможете просмотреть этот файл в режиме реального времени. Когда пользователи запускают поиск, новая строка отображается на экране. Первая часть - это время, когда поиск был запущен, сразу после этого время, которое занял поисковый запрос, далее идут некоторые внутренние данные sphinx, такие как количество результатов, возвращаемых запросом, места, где был произведен поиск (как правило, форумы) и в самом конце, ключевые слова, по которым производился поиск. Если вы не получаете никаких результатов, стоит проверить данный лог. Вы можете нажать Ctrl-C для выхода из лога.
Другой файл searchd.log, содержит информацию о самом процессе searchd, когда было сканирование индексов, когда начался и прекратился процесс, и тому подобные данные. Если процесс останавливается и вы должны перезапускать его ежедневно или что-то вроде того, то вам следует проверить этот файл.
Работает на DokuWiki |