Некорректно работает глобальный поиск

Некорректно работает глобальный поиск

от Anastasiya Shulika -
Количество ответов: 9
Добрый день, коллеги! 


Глобальный поиск на портале не работает корректно (и скорее всего, давно). 

Возьмем за основу следующие данные: 

Поисковые запросы: чек, прайс, коррекция. 

Файлы в кабинетах с такими названиями есть, кроме поискового запроса "коррекция". 

Описание ситуации: 

Три дня подряд вводятся данные значения в строку глобального поиска, но каждый раз, для каждого из значений высвечивается 4 разных результата. 

1. Система находит нужный вариант (кроме "чек", с ним всегда какие-то проблемы). 

2. Система пишет, что результатов нет. 

3. Система зависает на страничке глобального поиска (то есть, не дает никакого ответа). 

4. Система выдает ошибку. Скрин во вложении. 

Подскажите, пожалуйста, в чем проблема? И как ее решить? 

Технические сведения: 

Версия Moodle 3.3

Выбранное хранилище кэша : Redis

Заранее спасибо за оказанную помощь и поддержку) 

В ответ на Anastasiya Shulika

Re: Некорректно работает глобальный поиск

от Vadim Tabunshchik -
Изображение пользователя Developers
Глобальный поиск на портале не работает корректно (и скорее всего, давно)

А у вас поисковая система установлена и настроена? Задачи по расписанию «индексирование/обновление_индекса» выполняются?

В ответ на Vadim Tabunshchik

Re: Некорректно работает глобальный поиск

от Anastasiya Shulika -

Вадим, наш системный администратор сказал, что эта строка и является ответом на ваш вопрос)

/5  * * * root /usr/bin/php  /var/www/html/moodle/admin/cli/cron.php

В ответ на Anastasiya Shulika

Re: Некорректно работает глобальный поиск

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода
В ответ на Vadim Dvorovenko

Re: Некорректно работает глобальный поиск

от Anastasiya Shulika -

Добрый день, Вадим. 

Solr инсталирован корректно (как тут -

При поисковом запросе выдается следующая ошибка:

Debug info: 

[NULL]

Error code: invalidrecord

×Stack trace:

line 77 of /search/classes/base_mod.php: dml_missing_record_exception thrown

line 163 of /search/classes/base_activity.php: call to core_search\base_mod->get_cm()

line 153 of /search/classes/base_activity.php: call to core_search\base_activity->get_context_url()

line 186 of /search/classes/engine.php: call to core_search\base_activity->get_doc_url()

line 568 of /search/engine/solr/classes/engine.php: call to core_search\engine->to_document()

line 432 of /search/engine/solr/classes/engine.php: call to search_solr\engine->grouped_files_process_response()

line 156 of /search/engine/solr/classes/engine.php: call to search_solr\engine->process_response()

line 507 of /search/classes/manager.php: call to search_solr\engine->execute_query()

line 453 of /search/classes/manager.php: call to core_search\manager->search()

line 106 of /search/index.php: call to core_search\manager->paged_search().

Возможно это вам поможет. Но ошибок работы самого плагина - нет (потому поиск работает, но иногда криво, или вообще инфу не показывает).

Заранее спасибо. 

 

В ответ на Anastasiya Shulika

Re: Некорректно работает глобальный поиск

от Vadim Tabunshchik -
Изображение пользователя Developers

invalidrecord - отсутствующая (неверная) запись в таблице базы данных.

Ошибка происходит при поиске в модулях курса (call to core_search\base_mod->get_cm). Это видно и на скриншоте из первого поста: нет нужной записи в таблице mdl_resourse.

Ищите, какой ресурс вызывает ошибку, исправляйте в таблице.

В ответ на Vadim Tabunshchik

Re: Некорректно работает глобальный поиск

от Anastasiya Shulika -

Вадим, это понятно, но подскажите, пожалуйста, как найти ресурс, вызывающий ошибку? Есть какие-нибудь алгоритмы действий? 

В ответ на Anastasiya Shulika

Re: Некорректно работает глобальный поиск

от Vadim Tabunshchik -
Изображение пользователя Developers

Для начала сделайте проверку всех ключей/индексов и т. д. на странице «Администрирование ► Разработка ► Редактор XMLDB»

Дальше алгоритм действий один - проверять таблицы в БД, содержащие записи о модулях курса и ресурсах.

Сравните количество строк в таблице mdl_resource с результатом запроса:

SELECT COUNT(cm.instance) FROM mdl_course_modules cm WHERE cm.module=(
SELECT m.id FROM mdl_modules m WHERE m.name='resource')

Если совпадает, проверяйте соответствие значений столбца mdl_resource.id значениям в столбце mdl_course_modules.instance, ищите лишние/недостающие записи. Должно быть как на скриншоте:

image002

SQL-запрос:

SELECT 
 cm.course 'ID курса'
,r.course
,cm.instance
,r.id
,r.name
FROM mdl_course_modules cm JOIN mdl_resource r ON r.id=cm.instance
WHERE cm.module=(
SELECT m.id FROM mdl_modules m WHERE m.name='resource')
ORDER BY r.course, r.id ASC

Или сразу проверьте недостающие записи в mdl_resource (так как в ошибке упоминается эта таблица), выполнив запрос:

SELECT 
 cm.course 'ID курса'
,cm.instance
FROM mdl_course_modules cm
WHERE cm.module=(
SELECT m.id FROM mdl_modules m WHERE m.name='resource')
AND cm.instance NOT IN (SELECT m.id FROM mdl_resource m)

Если вывод НЕпустой - значит ресурс с id=cm.instance отсутствует в таблице mdl_resource, хотя в таблице mdl_course_modules запись о нем есть. Почему так случилось - вам виднее, кто-то баловался с записями в БД.

В ответ на Vadim Tabunshchik

Re: Некорректно работает глобальный поиск

от Anastasiya Shulika -

Вадим, прошлись по всему вашему алгоритму. Стоит отметить, что никаких несостыковок в системе не было найдено. 

1 шаг . Результаты поиска

Найдены отсутствующие индексы: 0

2 шаг. кол-во индексов совпадает -(mdl_resource) 472 = 472 (из предложенного запроса)

3 шаг. Все верно. ()сравнили в Excel)

4 шаг. MySQL [moodle]> SELECT

    ->  cm.course 'ID курса'

    -> ,cm.instance

    -> FROM mdl_course_modules cm

    -> WHERE cm.module=(

    -> SELECT m.id FROM mdl_modules m WHERE m.name='resource')

    -> AND cm.instance NOT IN (SELECT m.id FROM mdl_resource m);

Empty set (0.00 sec)


Подскажите, что теперь делать? Какой алгоритм есть на такой случай? 

В ответ на Vadim Tabunshchik

Re: Некорректно работает глобальный поиск

от Anastasiya Shulika -

Вадим, добрый день. 

С прошедшим Вас праздником. 

Есть какая-нибудь информация на мое последнее сообщение? 

Заранее спасибо. 

С уважением, Анастасия.