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