Индексы в OpenSearch

OpenSearch использует обратные индексы: структуру данных, которая сопоставляет термины (слова, токены) с документами, содержащими эти термины, и позициями этих терминов внутри документов.

Это основная структура, которая позволяет OpenSearch быстро выполнять поиск по тексту. Такие индексы отличаются от индексов БД и применяются для поиска, в том числе полнотекстового и неполнотекстового.

Схема индексирования: 1 индекс = 1 реестр/справочник

Создание и обновление индексов

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

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

По некоторым полям внутри записей (которые помечены как доступные для полнотекстового поиска – свойство «<Поисковый simplearray>») можно искать более подробно, используя поисковые критерии. Поля, которые не помечены поисковыми, участвуют в поиске только по точным значениям. Количество поисковых атрибутов также влияет на производительность.

Использование алиасов

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

Физические индексы создаются с добавлением временной метки (timestamp). Этот физический индекс более недоступен напрямую и скрыт от приложений.

Благодаря этому появилась возможность запускать фоновые задачи для переиндексации данных. Задача создает НОВЫЙ физический индекс с актуальным timestamp. В фоновом режиме данные перегоняются из старого индекса в новый. Пока это происходит старый индекс с предыдущей временной меткой доступен для поиска. Старый индекс (и алиас) остаются доступны для ЗАПИСИ (индексации новых данных или обновления).

Все новые данные, поступающие в систему во время работы переиндексации, автоматически применяются и к старому, и к новому индексу - это обеспечивает актуальность данных в новом индексе.

Удаление индексов

Примечание

Удаление индексов вручную запрещено.

Индексы отслеживаются в базе и в памяти. Если удалить индекс за пределами системы, то состояние системы и индексов будет рассинхронное.

В результате действий операция переиндексации будет иметь закэшированное состояние, сообщающее о том, что алиас должен быть перенесен со старого на новый индекс. При попытке выполнить переприсвоение операция упадет с index_not_found exception, что приведет к потере индекса без алиаса.

Состояние индексов отслеживается в org_unidata_mdm_search.aliases_info. Таблица имеет вид:

Alias

Current real index name

613_default_countries

613_default_countries-1758551181402

613_default_$countries

613_default_$countries-1758551181921

...

...

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