Операция переиндексации данных (reindexDataJob)
В этой статье:
Операция переиндексации данных предназначена для запуска индексации поисковой системы при значимых изменениях в структуре записей или при добавлении новых данных. Индексированные данные ускоряют поиск и отображаются в интерфейсе пользователя.
По условиям лицензирования у операции reindexDataJob может быть отключена многопоточность. В таком случае операция будет запускаться только на одном узле кластера.
Параметры операции
Имя пользователя (поле ввода). Логин учетной записи (рекомендуется к заполнению). Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то:
Операция выполняется от имени пользователя, фактически запустившего операцию, но если при запущенной без указания пользователя операции произошел выход из системы (случайный или принудительный при потере соединения), то операция завершится с ошибкой.
При запуске по Cron-выражению у операции будут полные права на любой реестр/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на реестры/справочники. Если логин не указан, то операция запуститься от имени пользователя, который ее запустил.
ID операции (поле ввода). Позволяет задавать идентификатор операции.
Фоновая переиндексация (флаг). Позволяет запускать операцию в фоновом режиме.
Размер блока (поле ввода). Размер блока загружаемых данных (количество записей). Значение по умолчанию 1024.
Секция "Индексация бизнес-процессов":
Проиндексировать данные бизнес-процессов (флаг). Отключает или включает параметр. Параметр доступен при наличии модуля бизнес-процессов.
Проиндексировать бизнес-процессы (выпадающий список). Выбирает имена бизнес-процессов, данные которых будут переиндексированы. Если параметр отключен, то процессы не индексируются. Параметр доступен при наличии модуля бизнес-процессов.
Секция "Индексация черновиков":
Проиндексировать черновики (флаг). Выполняет индексацию черновиков в индекс
default_default_[draft]
.
Секция "Индексация модели данных":
Проиндексировать модель данных (флаг). Выполняет индексацию модели данных в индекс
default_default_[model]
.
Секция "Индексация данных":
Проиндексировать данные (флаг). Запускает переиндексацию записей. Единичную запись можно переиндексировать отдельно из карточки записи.
Проиндексировать черновики данных (флаг). Запускает индексацию черновиков записей и их дочерних сущностей (связей и т.п.) в индексы черновиков выбранных реестров/справочников.
Проиндексировать объекты модели (выпадающий список). Реестр/справочник для которого будет выполнена переиндексация (доступен выбор нескольких). По умолчанию установлено значение All - операция выполняется для всех реестров/справочников.
При переиндексации отдельного реестра его связи индексируются только с левой стороны. Чтобы переиндексировать обе стороны, необходимо также переиндексировать связанный реестр.
Обновить маппинги (флаг). Обновляет маппинги индекса.
Очищать индексы (флаг). Удаляет старые индексы и создает новые.
Не создавать стандартный отчет (флаг). Отключает запись событий в журнал аудита.
Писать лог ошибок (флаг). При включении флага, процесс будет собирать любые ошибки, которые возникают при обработке записей в таблицу. Таблица автоматически создается (и удаляется, если оказывается пустой по окончании работы задачи) в схеме org_unidata_mdm_data и использует заданный пользователем "Operation ID" для генерации имени.
Обработать лог ошибок (флаг). При включении флага, записи из основного хранилища не будут считываться и обрабатываться. Параметр включает специальный режим, при котором записи из основных таблиц не читаются, индексы не удаляются, индексы не переводятся в специальный пакетный режим, не обновляется маппинг. Также игнорируется флаг переиндексации черновиков данных, черновики не обрабатываются. Флаг несовместим с режимом фоновой переиндексации, и операция не запустится при одновременном включении флагов.
Если включен флаг "Обработать лог ошибок", то флаги "Проиндексировать данные" и "Проиндексировать черновики данных" должны быть отключены.
Продолжать при ошибках? (флаг). При включении продолжает запуск блока даже в случае возникновения ошибок.
Секция "Индексация классификаторов":
Проиндексировать классификаторы (выпадающий список). Выбирает имена классификаторов, данные которых будут переиндексированы. Если параметр отключен, то классификаторы не индексируются.
Обновить маппинги (флаг). Обновляет маппинги индекса. Если флаг включен - будет создан индекс для классификаторов и черновиков классификаторов, если таковых не существовало ранее.
Очистить индекс (флаг). Удаляет старые индексы и создает новые. Если включен - индекс для классификаторов и черновиков классификаторов будет пересоздан.
Проиндексировать классификаторы (флаг). Выполняет индексацию выбранных версий классификаторов. Например, если была выбрана версия V классификатора C, то будут проиндексированы следующие элементы: Классификатор C, Версия V, Все узлы версии V. Группы (узлы, содержащие потомков) не могут быть выбраны в качестве значения - при нажатии на них производится выбор/снятие выбора всех потомков узла. В поле ввода отображаются имена классификаторов и выбранной версии. Если текст имен слишком длинный - он обрезается, а полное название будет отображаться по наведению курсора.
Когда применяется
Операция запускается в случаях:
Если производились значимые изменения модели данных, записях, классификации, таблицы сопоставления и т.д.
При назначении правил сопоставления на реестры/справочники, где уже присутствуют записи;
При переходе на OpenSearch с потерей данных с помощью docker или вручную.
Если есть сомнения в актуальности данных в индексе. Например, не отображается часть записей.
Если было загружено много данных, и они не отображаются.
Если индекс данных был очищен вручную.
Периодичность запуска определяется администратором системы с учетом рабочих задач по обслуживанию Юниверс MDM.
Особенности применения:
После отработки операции происходит обнуление результатов проверки правил качества (счетчиков ошибок DQ) вместе со старым индексом.
Корректный запуск операций в этом случае будет следующий:
Сначала запуск reindexDataJob — для восстановления поисковых индексов.
После этого запуск reapplyDataJob — для пересчета результатов правил качества и актуализации счетчиков ошибок.
Лог ошибок
Параметры "Писать/Обработать лог ошибок" сохраняют в БД информацию о записях, не попавших в индекс, чтобы при дальнейшем запуске была возможность дообработать только неудачно завершившуюся часть, что существенно экономит время на полную переиндексацию большого количества записей.
Параметры используются в случае, когда происходит прерывание очереди индексации Opensearch и завершение индексирующих запросов с ошибкой EsRejectedExecutionException. Во всех остальных случаях параметры должны быть отключены.
Если необходимо переиндексировать большие данные:
Сначала запускается операция с флагом "Писать лог ошибок".
Затем, если остаются неиндексированные данные, запускается операция повторно, с выключенным флагом "Писать лог ошибок" и включенным "Обработать лог ошибок".
Также при больших данных можно отключать параметры "Очищать индексы" и "Обновить маппинги".
Механизм работы параметра "Размер блока" (blockSize)
Все количество обрабатываемых записей делится на части по blockSize записей.
Затем в каждой части обрабатывается одним тредом по org.unidata.mdm.job.reindex.data.commit.interval
записей (в памяти держится информация по этому количеству записей, при переходе к следующим записям память очищается), пока не кончатся записи.
Параметр org.unidata.mdm.job.reindex.data.commit.interval
, как правило, не нуждается в редактировании. Рекомендуемого значения 1000 достаточно для большинства задач. Чем больше этот параметр, тем больше памяти может быть занято в один момент времени. Если этот параметр больше, чем blockSize, то фактически этот параметр будет равен blockSize.
org.unidata.mdm.job.reindex.data.reindex.threads
- количество одновременно обрабатываемых тредов.
Параметры org.unidata.mdm.job.reindex.data.commit.interval
и org.unidata.mdm.job.reindex.data.reindex.threads
задаются в backend.properties.
Таким образом, следует выбирать org.unidata.mdm.job.reindex.data.reindex.threads
по количеству логических ядер процессора (использовать равное или меньшее число, в зависимости от наличия другой нагрузки на процессор).
При указании небольшого blockSize легче отслеживать прогресс операции через UI (менеджер запусков > выбрать запуск > количество выполненных шагов).
Также blockSize необходимо выбирать в соответствии с общим количеством данных чтобы количество партиций не было слишком большим. На таких больших данных, как в справочнике с адресами, оптимальным вариантом является 500-2000 партиций.
Обработка данных происходит последовательно: записи > связи > классификаторы > бизнес-процессы > матчинг. Сначала завершается обработка одного типа данных, затем происходит переход к другому. Обрабатываются те типы данных, которые есть в наличии.
Фоновая переиндексация
Стандартные имена индексов являются псевдонимами. Система сохраняет состояние присвоения между перезапусками, это позволяет держать несколько реальных индексов, относящихся к одному и тому же псевдониму, и дает возможность переиндексировать данные без очистки текущих индексов, т.е. не останавливать работу на время переиндексации и работать в фоновом режиме.
Индексация в фоновые индексы создает специальный объект переиндексации на кластере, который содержит ссылки на реальные индексы, созданные для будущей привязки к псевдонимам. Код индекс-компоненты сделан таким образом, что, если при вводе есть ID процесса фоновой переиндексации, то запрос перенаправляется в фоновый индекс, контролируемый процессом с таким ID. Это дает возможность принимать обновления в существующие индексы, не прерывая работу пользователей.
В текущей реализации не поддерживается фоновая переиндексация модели данных и модели классификаторов, которые индексируются по старой схеме.
Индексация записей, их связей и классификаций происходит автоматически. В случае переиндексации отдельного реестра его связи индексируются только с левой стороны. Чтобы переиндексировать обе стороны, необходимо также переиндексировать связанный реестр.
Системные параметры, отвечающие за фоновую переиндексацию:
org.unidata.mdm.search.switch.await.timeout
- Максимальное время ожидания переключения индекса задвижкой, значение по умолчанию = 60000 миллисекунд;org.unidata.mdm.search.submitted.bulk.poll.interval
- Интервал между опросом состояния обработки пакетных запросов индексации, значение по умолчанию = 10 миллисекунд (недоступен в интерфейсе);org.unidata.mdm.search.background.id.lock.timeout
- Время ожидания при захвате идентификатора фонового процесса переиндексации, значение по умолчанию = 20000 миллисекунд;org.unidata.mdm.search.background.orphan.expiration.interval
- Время жизни заброшенных фоновых процессов переиндексации, значение по умолчанию = сутки.
Переиндексация единичной записи
Предварительно:
Создайте учетную запись с правами на чтение реестра. Доступ к разделам настраивается для роли, которая впоследствии назначается учетной записи.
Чтобы переидексировать единичную запись:
Найдите требуемую запись при помощи инструментов поиска и откройте ее.
Нажмите комбинацию клавиш Ctrl + Alt + i и в открывшемся модальном окне (Рисунок 1) нажмите кнопку "ОК".

Рисунок 1 - Окно подтверждения переиндексации единичной записи