Операция переиндексации данных (reindexDataJob)

В этой статье:

Операция переиндексации данных предназначена для запуска индексации поисковой системы при значимых изменениях в структуре записей или при добавлении новых данных. Индексированные данные ускоряют поиск и отображаются в интерфейсе пользователя.

По условиям лицензирования у операции reindexDataJob может быть отключена многопоточность. В таком случае операция будет запускаться только на одном узле кластера.

Параметры операции

  • Имя пользователя (поле ввода). Логин учетной записи. Определяет, с правами какой учетной записи будет запускаться операция. Если поле пустое, то при запуске по Cron-выражению у операции будут полные права на любой реестр/справочник; при запуске через интерфейс у операции будут права текущей учетной записи. Для учетной записи оператора данных может понадобиться настроить права на реестры/справочники.

  • ID операции (поле ввода). Позволяет задавать идентификатор операции.

  • Фоновая переиндексация (флаг). Позволяет запускать операцию в фоновом режиме.

  • Размер блока (поле ввода). Размер блока загружаемых данных (количество записей). Значение по умолчанию 1024.

Секция "Индексация бизнес-процессов":

  • Проиндексировать данные бизнес-процессов (флаг). Отключает или включает параметр. Параметр доступен при наличии модуля бизнес-процессов.

  • Проиндексировать бизнес-процессы (выпадающий список). Выбирает имена бизнес-процессов, данные которых будут переиндексированы. Если параметр отключен, то процессы не индексируются. Параметр доступен при наличии модуля бизнес-процессов.

Секция "Индексация черновиков":

  • Проиндексировать черновики (флаг). Выполняет индексацию черновиков в индекс default_default_[draft].

Секция "Индексация модели данных":

  • Проиндексировать модель данных (флаг). Выполняет индексацию модели данных в индекс default_default_[model].

Секция "Индексация данных":

  • Проиндексировать данные (флаг). Запускает переиндексацию записей. Единичную запись можно переиндексировать отдельно из карточки записи.

  • Проиндексировать черновики данных (флаг). Запускает индексацию черновиков записей и их дочерних сущностей (связей и т.п.) в индексы черновиков выбранных реестров/справочников.

  • Проиндексировать объекты модели (выпадающий список). Реестр/справочник для которого будет выполнена переиндексация (доступен выбор нескольких). По умолчанию установлено значение All - операция выполняется для всех реестров/справочников.

    • При переиндексации отдельного реестра его связи индексируются только с левой стороны. Чтобы переиндексировать обе стороны, необходимо также переиндексировать связанный реестр.

  • Обновить маппинги (флаг). Обновляет маппинги индекса.

  • Очищать индексы (флаг). Удаляет старые индексы и создает новые.

  • Не создавать стандартный отчет (флаг). Отключает запись событий в журнал аудита.

  • Писать лог ошибок (флаг). При включении флага, процесс будет собирать любые ошибки, которые возникают при обработке записей в таблицу. Таблица автоматически создается (и удаляется, если оказывается пустой по окончании работы задачи) в схеме org_unidata_mdm_data и использует заданный пользователем "Operation ID" для генерации имени.

  • Обработать лог ошибок (флаг). При включении флага, записи из основного хранилища не будут считываться и обрабатываться. Параметр включает специальный режим, при котором записи из основных таблиц не читаются, индексы не удаляются, индексы не переводятся в специальный пакетный режим, не обновляется маппинг. Также игнорируется флаг переиндексации черновиков данных, черновики не обрабатываются. Флаг несовместим с режимом фоновой переиндексации, и операция не запустится при одновременном включении флагов.

    • Если включен флаг "Обработать лог ошибок", то флаги "Проиндексировать данные" и "Проиндексировать черновики данных" должны быть отключены.

  • Продолжать при ошибках? (флаг). При включении продолжает запуск блока даже в случае возникновения ошибок.

Секция "Индексация классификаторов":

  • Проиндексировать классификаторы (выпадающий список). Выбирает имена классификаторов, данные которых будут переиндексированы. Если параметр отключен, то классификаторы не индексируются.

  • Обновить маппинги (флаг). Обновляет маппинги индекса. Если флаг включен - будет создан индекс для классификаторов и черновиков классификаторов, если таковых не существовало ранее.

  • Очистить индекс (флаг). Удаляет старые индексы и создает новые. Если включен - индекс для классификаторов и черновиков классификаторов будет пересоздан.

  • Проиндексировать классификаторы (флаг). Выполняет индексацию выбранных версий классификаторов. Например, если была выбрана версия V классификатора C, то будут проиндексированы следующие элементы: Классификатор C, Версия V, Все узлы версии V. Группы (узлы, содержащие потомков) не могут быть выбраны в качестве значения - при нажатии на них производится выбор/снятие выбора всех потомков узла. В поле ввода отображаются имена классификаторов и выбранной версии. Если текст имен слишком длинный - он обрезается, а полное название будет отображаться по наведению курсора.

Когда применяется

Операция запускается в случаях:

Периодичность запуска определяется администратором системы с учетом рабочих задач по обслуживанию Юниверс MDM.

Лог ошибок

Параметры "Писать/Обработать лог ошибок" сохраняют в БД информацию о записях, не попавших в индекс, чтобы при дальнейшем запуске была возможность дообработать только неудачно завершившуюся часть, что существенно экономит время на полную переиндексацию большого количества записей.

Параметры используются в случае, когда происходит прерывание очереди индексации 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 партиций.

Обработка данных происходит последовательно: записи > связи > классификаторы > бизнес-процессы > матчинг. Сначала завершается обработка одного типа данных, затем происходит переход к другому. Обрабатываются те типы данных, которые есть в наличии.

Фоновая переиндексация

Стандартные имена индексов являются псевдонимами. Например, имя индекса samolet_default_[draft] является псевдонимом для текущего реального индекса samolet_default_[draft]-1732482608717. Система сохраняет состояние присвоения между перезапусками, это позволяет держать несколько реальных индексов, относящихся к одному и тому же псевдониму, и дает возможность переиндексировать данные без очистки текущих индексов, т.е. не останавливать работу на время переиндексации и работать в фоновом режиме.

Индексация в фоновые индексы создает специальный объект переиндексации на кластере, который содержит ссылки на реальные индексы, созданные для будущей привязки к псевдонимам. Код индекс-компоненты сделан таким образом, что если при вводе есть ID процесса фоновой переиндексации, то запрос перенаправляется в фоновый индекс, контролируемый процессом с таким ID. Это дает возможность принимать обновления в существующие индексы, не прерывая работу пользователей и делая работу задачи переиндексации менее заметной.

Регулярные обновления, создаваемые во время работы задачи, могут быть направлены сразу в несколько индексов - в основной, который виден пользователю, и в фоновые. Чтобы предотвратить переписывание более новых данных старыми со стороны индексера используется optimistic lock в виде внешней версии, равное 1 (поля version и version_type - см. подробнее в статье). По окончании работы индексера специальная распределенная задвижка кратковременно останавливает все индексирующие потоки на кластере для переключения псевдонимов на новые индексы. Также задвижка срабатывает перед началом переиндексации данных. Это может быть заметно на средствах мониторинга и является нормальным.

Для поддержки фоновой индексации индексируемый тип должен иметь ManagedIndexId. Это значит, что идентификаторы записей индекса должны быть предсказуемо конструируемы для поддержки удаления без дополнительных запросов. Из всего массива индексируемых сейчас данных ManagedIndexId не поддерживает только модель данных и модель классификаторов. Они не могут быть проиндексированы в фоновом режиме. Все остальные могут, и на этом основании были убраны флаги "Обновить маппинг" и "Очистить индекс". Модель данных (в данный момент приложением не используется) и модель классификаторов индексируются по старой схеме.

Поскольку данные теперь рассматриваются в совокупности (записи, их связи и классификация), были удалены флаги "Индексировать связи" и "Индексировать классификацию". Индексация этих объектов происходит всегда автоматически. В случае переиндексации отдельного реестра его связи индексируются только с левой стороны. Чтобы переиндексировать обе стороны, необходимо также переиндексировать связанный реестр.

Системные параметры, влияющие на процесс фоновой переиндексации:

  • 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 - Время жизни заброшенных фоновых процессов переиндексации, значение по умолчанию = сутки.

Переиндексация единичной записи

Предварительно:

Чтобы переидексировать единичную запись:

  1. Найдите требуемую запись при помощи инструментов поиска и откройте ее.

  2. Нажмите комбинацию клавиш Ctrl + Alt + i и в открывшемся модальном окне (Рисунок 1) нажмите кнопку "ОК".

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

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