intermediate
Elasticsearch
Используйте Elasticsearch для distributed search с shards, mappings, analyzers, aggregations и operational cost.
Elasticsearch — распределённый поисковый и аналитический движок на Lucene. Документы живут в индексах, разбитых на шарды; каждый шард — отдельный Lucene-индекс с инвертированным индексом. Mapping задаёт типы полей и анализаторы; запросы идут по инвертированному индексу и возвращают документы с оценкой релевантности и агрегации.
| Понятие | Роль | |---------|------| | Index | Логическое пространство документов | | Shard | Единица распределения и параллелизма | | Mapping | Схема: типы, анализаторы, multi-fields | | Analyzer | Конвейер токенизации при индексации и поиске | | Refresh | Делает свежие записи видимыми для поиска (почти в реальном времени) |
Типичная архитектура: приложение пишет в PostgreSQL как источник истины, синхронизирует денормализованные search-документы через CDC или batch, а пользовательский поиск и фильтры обслуживает Elasticsearch.
PUT /products/_doc/1
{ "title": "Беспроводная клавиатура", "brand": "Acme", "price": 79 }
На интервью: объясните, зачем search выносится в отдельное хранилище, как шарды масштабируют чтение и запись, чем обходится смена mapping при reindex, и какие операционные риски (heap, merge сегментов, yellow/red состояние кластера).
Типовые ошибки: использовать Elasticsearch как основную БД; сюрпризы dynamic mapping на новых полях; огромные документы; пять шардов по умолчанию на маленьком кластере; игнорировать refresh interval при write-heavy нагрузке; агрегации по high-cardinality полям без фильтров.
Компромисс — богатая релевантность поиска и быстрая фильтрация против операционной сложности, eventual consistency с источником и стоимости reindex при смене схемы.
Чеклист:
- Назовите index, shard, replica, mapping, analyzer.
- Разделите source of truth и search index.
- Опишите путь синхронизации и допустимую устарелость.
- Упомяните refresh, scoring и лимиты агрегаций.
- Отметьте здоровье кластера и стратегию reindex.