Схемы 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 реиндексации (шаблон)

  1. Создать новый индекс canonical_products_vN с новым маппингом.
  2. Запустить reindex (или full rebuild из event store).
  3. Прогнать golden-set тесты на новом индексе.
  4. Переключить alias.
  5. Удалить старый индекс через N дней.

Тестирование

search-golden-set.yaml в этой папке — набор запросов с ожидаемыми top-результатами. Прогоняется в CI при любом изменении маппингов или аналайзеров. (TBD)

Объяснимость

В админском UI для каждого результата доступен _explain через специальный endpoint admin-api. Документирован в ../../30-services/admin-api/README.md.