Схемы Elasticsearch
NOTE
Статус: Target schemas. Описание целевых схем данных. Миграции и реальные таблицы в
backend/migrations/могут отставать от документа. Правила маркировки — в50-processes/documentation-standard.md.
Маппинги индексов, аналайзеры, синонимы.
Структура
elasticsearch/
├── README.md # ← этот файл
├── analyzers/
│ ├── russian_with_transliteration.json
│ └── technical_tokens.json
├── synonyms/
│ ├── units.txt # мм=миллиметр=millimeter, ...
│ ├── technical_abbreviations.txt
│ └── ip_ratings.txt
├── mappings/
│ ├── canonical_products.json # основной поисковый индекс
│ ├── offers_live.json # offers с ценами для faceted
│ └── manufacturers.json
└── reindex-runbooks/
└── ...
Принципы (см. P8)
- Все маппинги и аналайзеры в git.
- Никакой правки через Kibana в проде.
- Изменение = PR + golden-set тесты.
- Blue-green индексирование: индексы версионируются (
canonical_products_v7), alias переключается (canonical_products_current).
Индекс canonical products (концептуально)
Ключевые поля:
id— keyword (UUID).identity_signature— keyword.manufacturer—{id, canonical_name, aliases[]}с.keyword+.text(analyzer).mpn— keyword + edge-ngram.identity_profile_id— keyword.name— text (Russian + transliteration analyzer).description— text.characteristics— nested:key— keyword.value_normalized— keyword или number.value_display— text.unit— keyword.
classification_tags— nested{source, key, value}.object_type— keyword (копия из characteristics для фильтров).embedding— dense_vector (dims=1024, similarity=cosine), опционально.lifecycle_status— keyword.replaced_by_id— keyword.has_active_offers— boolean (денорм. для фильтра).lowest_price_rub— float (денорм., для sort).updated_at— date.
Полный JSON — в mappings/canonical_products.json (TBD).
Аналайзеры
russian_with_transliteration: токенизатор standard + lowercase + русский стеммер (snowball) + транслитерация (icu_transform + ascii-folding).technical_tokens: токены вроде “IP54”, “M10x50”, “220V” — cохраняются целиком с edge-ngram для префиксного поиска.
Синонимы
units.txt— единицы измерения на разных языках.technical_abbreviations.txt— IP, УХЛ, AC/DC, …ip_ratings.txt— IP 54, IP54, IP-54.
Runbook реиндексации (шаблон)
- Создать новый индекс
canonical_products_vNс новым маппингом. - Запустить reindex (или full rebuild из event store).
- Прогнать golden-set тесты на новом индексе.
- Переключить alias.
- Удалить старый индекс через N дней.
Тестирование
search-golden-set.yaml в этой папке — набор запросов с ожидаемыми top-результатами. Прогоняется в CI при любом изменении маппингов или аналайзеров. (TBD)
Объяснимость
В админском UI для каждого результата доступен _explain через специальный endpoint admin-api. Документирован в ../../30-services/admin-api/README.md.