Предотвращение дублирования данных по нескольким индексам в Elasticsearch

#elasticsearch

Вопрос:

Предотвращение дублирования данных обрабатывается на уровне индекса с помощью поля «_id». Однако, чтобы избежать огромных индексов, я работаю с несколькими небольшими индексами, связанными под псевдонимом. Существует ли механизм проверки существующих _id на уровне псевдонима (по нескольким индексам) при вставке документа или его следует обрабатывать на уровне приложения ?

архитектура индексов

Ответ №1:

не изначально, нет. вам нужно будет обработать это в своем собственном коде

Ответ №2:

Перед вставкой документа вам необходимо сначала выяснить, какой реальный индекс содержит ваш документ, используя псевдоним с помощью

 GET alias/_search?q=_id:123456amp;filter_path=hits.hits._index
 

В ответе вы получите конкретное имя индекса, которое затем можно использовать для индексации/обновления новой версии документа.

Комментарии:

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

2. Другой способ справиться с этим-хэшировать идентификатор и на основе хэша решать, в какой индекс попадет документ, таким образом, вы всегда будете знать, в каком индексе искать данный идентификатор

3. Да, я думаю, что это правильный путь. Но есть ли встроенный способ сделать это с помощью elastic (например, псевдоним, который может условно вставлять документы в индекс или другой) ? Или это приложение, которое вставляет данные, которые должны будут реализовать эту логику маршрутизации ?

4. ES не предоставляет этого на уровне индекса (только на уровне сегментов с параметром маршрутизации). Но это однонаправленная логика вашего приложения.