#elasticsearch
Вопрос:
Предотвращение дублирования данных обрабатывается на уровне индекса с помощью поля «_id». Однако, чтобы избежать огромных индексов, я работаю с несколькими небольшими индексами, связанными под псевдонимом. Существует ли механизм проверки существующих _id на уровне псевдонима (по нескольким индексам) при вставке документа или его следует обрабатывать на уровне приложения ?
Ответ №1:
не изначально, нет. вам нужно будет обработать это в своем собственном коде
Ответ №2:
Перед вставкой документа вам необходимо сначала выяснить, какой реальный индекс содержит ваш документ, используя псевдоним с помощью
GET alias/_search?q=_id:123456amp;filter_path=hits.hits._index
В ответе вы получите конкретное имя индекса, которое затем можно использовать для индексации/обновления новой версии документа.
Комментарии:
1. Я боюсь, что выполнение этой проверки для каждого вставленного документа не подходит для моего варианта использования (это значительно замедлило бы процесс приема данных).
2. Другой способ справиться с этим-хэшировать идентификатор и на основе хэша решать, в какой индекс попадет документ, таким образом, вы всегда будете знать, в каком индексе искать данный идентификатор
3. Да, я думаю, что это правильный путь. Но есть ли встроенный способ сделать это с помощью elastic (например, псевдоним, который может условно вставлять документы в индекс или другой) ? Или это приложение, которое вставляет данные, которые должны будут реализовать эту логику маршрутизации ?
4. ES не предоставляет этого на уровне индекса (только на уровне сегментов с параметром маршрутизации). Но это однонаправленная логика вашего приложения.