Формулировка проблемы: при большом количестве данных медленно работают фильтры реестров.
Используется: административное приложение - Обслуживание системы
Решение: необходимо реализовать функцию переиндексации индекса форм. При этом должны быть проиндексированы все документы по формам.
Во-первых, в раздел "Обслуживание системы" требуется добавить пункт "Управление индексом форм":
Окно "Управление индексом данных форм" содержит текущую статистику состояния данных, параметры и кнопки запуска и остановки индексирования, а также панель информации.
Статистика состояния данных
Размер индекса в байтах: при использовании Lucene (устанавливается по умолчанию) отображается прочерк "-"; при использовании Elasticsearch - текущий размер индекса.
Общее количество записей: общее количество документов по формам.
Количество удаленных записей: количество индексов, удаленных при изменении индексируемых данных.
Запуск и остановка индексирования
Продолжить предыдущий процесс индексирования: флаг, позволяющий продолжить ранее запущенный и остановленный процесс индексирования.
Если ранее индексирование не осуществлялось, или нет ранее запущенного и остановленного процесса, флаг недоступен.
Если последний процесс индексирования был остановлен, то рядом с флагом указан номер позиции, с которой продолжится индексирование.
Если последний процесс индексирования был остановлен, а флаг отключен, то процесс индексирования начнется заново.
Пауза между индексированием часлей записей (мс): числовое поле ввода, в котором указывается время необходимой паузы в процессе индексирования. Одной "частью" считается индексирование 500 документов.
Процесс запускается по нажатию на кнопку "Проиндексировать все данные форм". Система запрашивает подтверждение действия:
"Вы действительно хотите проиндексировать все записи?"
Если пользователь подтверждает действие, процесс индексирования начинается. При этом в панели информации отображается сведения о процессе индексирования каждой части в формате:
"Отправлен запрос на индексирование данных форм"
"Индексирование записей начато %ГГГГ-ММ-ДД ЧЧ:ММ%. Займет примерно 2 минуты на каждые 2000 документов. В вашей базе %общее_количество_записей% записей."
"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"
...
"Общее количество записей %общее_количество_записей%, проиндексировано %количество_проиндексированных_записей% за %ss% секунд"
В случае, если в процессе индексирования очередной части возникли ошибки, то их текст будет отображен в отдельном сообщении об ошибке. При этом индексирование будет продолжено.
Процесс останавливается в двух случаях:
Ручная остановка - по нажатию на кнопку "Остановить индексирование". При этом в панели информации выводится сообщение:
"Процесс индексирования остановлен"
Номер позиции, на которой процесс был остановлен, запоминается, и в дальнейшем индексирование можно продолжить с этой позиции либо начать заново.
Все данные проиндексированы - процесс завершается самостоятельно. При этом в панели информации выводится сообщение:
"Индексирование завершено. Индексирование %общее_количество_записей% записей заняло %M% минут"
Помимо панели информации, сообщения о прогрессе индексирования выводятся как уведомления.