System Design Space
Граф знанийНастройки

Обновлено: 4 мая 2026 г. в 07:57

Elasticsearch: поисковый движок и архитектура

средний

Распределённый поисковый и аналитический движок на базе Apache Lucene: поисковые индексы, шарды, реплики, релевантность, циклы обновления и путь чтения/записи.

Elasticsearch полезно понимать не как ещё одну базу данных, а как отдельный поисковый слой со своей моделью индексации, задержками обновления и эксплуатационными рисками.

В реальной работе эта глава помогает заранее думать про шардирование, шаблоны индексов, переключение на новые индексы, переиндексацию и поведение почти в реальном времени, чтобы поиск не оказался хрупкой магией поверх основного хранилища.

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

Практическая польза главы

Граница поиска

Разделяйте поисковый индекс и транзакционное хранилище: Elasticsearch ускоряет поиск, но не заменяет источник истины.

Жизненный цикл индексов

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

Релевантность и задержка

Согласовывайте анализаторы текста, ранжирование и кэширование с требованиями UX и нагрузкой запросов.

Формулировка на интервью

Обосновывайте, зачем вводится отдельный поисковый слой и какие риски появляются в консистентности данных.

Источник

Wikipedia: Elasticsearch

История проекта, базовая архитектура и место Elasticsearch в экосистеме поиска.

Открыть статью

Официальный сайт

Elastic: Elasticsearch

Продуктовая документация, возможности платформы и рекомендации по эксплуатации.

Открыть сайт

Elasticsearch - распределённый поисковый и аналитический движок на базе Apache Lucene. В системном дизайне его обычно используют как отдельный поисковый слой над транзакционной БД: это ускоряет полнотекстовый поиск и фильтрацию, но требует осознанной работы с индексами, консистентностью и стоимостью эксплуатации.

В этой главе опирается на : внутри него работают , и реплики. Запись идёт от через приём данных, а чтение проходит через . Поэтому важны , и операционная цена переиндексации.

История и контекст

2010

Появление проекта

Elasticsearch создаётся как распределённый REST-движок поверх Apache Lucene.

2012

Формирование ELK-экосистемы

Поисковый слой, конвейеры логов и визуализация начинают использоваться вместе в едином стеке.

2018

Рост enterprise-сценариев

Платформа широко применяется для лог-аналитики, наблюдаемости и продуктового поиска.

2021+

Эволюция лицензирования и облака

Активно развиваются облачные предложения и операционные практики для кластеров под высокой нагрузкой.

Ключевые архитектурные элементы

Индекс, шарды и реплики

Индекс делится на основные шарды, а для отказоустойчивости добавляются реплики. Это база горизонтального масштабирования.

Кластер и роли узлов

Кластер координирует выполнение запросов, хранение данных и ребалансировку шардов между узлами.

Поиск почти в реальном времени

Данные становятся доступны для поиска не мгновенно, а после цикла обновления индекса. Это компромисс между свежестью выдачи и пропускной способностью.

Релевантность и ранжирование

Формула BM25 и настройки анализа текста помогают ранжировать результаты и управлять качеством выдачи.

Архитектура Elasticsearch по слоям

Ниже схема базового контура Elasticsearch в продуктовой системе: отдельный поисковый слой, конвейер индексации и кластер с основными шардами и репликами.

Клиенты и API
Web/mobileREST APIQuery DSLKibana
переход слоя
Приём данных
CDC / outboxBeats/LogstashBulk APIописание полей
переход слоя
Координация запроса
разбормаршрутизацияscatter/gatherсбор ответа
переход слоя
Индекс и хранение
основные шардысегменты Luceneинвертированный индексrefresh/merge
переход слоя
Репликация и устойчивость
реплики шардовразмещение шардовпереключениемасштаб чтения
переход слоя
Эксплуатация кластера
ILMснимкиавтомасштабированиемониторинг

системный взгляд

Elasticsearch обычно разворачивают как отдельный поисковый и аналитический слой над транзакционным источником истины.

Качество поиска

формула BM25анализаторы текстасинонимы и boost

Аналитика

агрегациифасеты и фильтрыисследование временных рядов

Цена эксплуатации

почти реальное времястоимость индексовобслуживание кластера

Пути записи и чтения через компоненты

Ниже интерактивная схема: как данные попадают в индекс и как запрос проходит через координирующий узел и шарды до финальной выдачи.

Пути записи и чтения

Как документ попадает в поисковый индекс и как запрос проходит через основные компоненты.

1
Источник данных
каноническое состояние
2
Приём изменений
CDC / outbox
3
Основной шард
запись в индекс
4
Реплики шардов
репликация
5
Обновление индекса
почти реальное время
Путь записи: изменение проходит приём данных, попадает в основной шард, реплицируется и появляется в поиске после цикла обновления индекса.

Путь записи

  1. Сервис записывает событие в источник истины, обычно в транзакционную базу данных.
  2. Через CDC/outbox или конвейер приёма документ попадает в индексатор.
  3. Elasticsearch кладёт документ в основной шард и копирует его на реплики.
  4. После цикла обновления индекса документ появляется в поисковой выдаче.

Когда выбирать Elasticsearch

Хорошо подходит

  • Полнотекстовый поиск в продукте (каталоги, статьи, документация).
  • Наблюдаемость: поиск по логам, событиям и трассировкам.
  • Сценарии, где важны гибкие фильтры + агрегации + ранжирование.
  • Системы с преобладанием чтения и высокой потребностью в быстром поиске.

Стоит избегать

  • Как единственный источник истины для критичных транзакционных данных.
  • Транзакционные нагрузки с частыми точечными изменениями и строгими ACID-ожиданиями.
  • Сценарии без полнотекстового поиска, где проще и дешевле обойтись SQL/кэшем.
  • Системы без готовности к операционной поддержке кластера и индексов.

Практика: DDL и DML

Ниже практические API-запросы, которые часто обсуждают в системном дизайне: от создания индекса и описания полей до записи и поиска документов.

Примеры DDL и DML в Elasticsearch

DDL управляет индексами и описанием полей, DML работает с документами и поисковыми запросами.

DDL в Elasticsearch - это операции со структурой: создание индекса, настройка шардов и реплик, изменение описания полей.

Создание индекса с настройками и описанием полей

PUT /products-v1

Задаём количество шардов/реплик и типы полей для корректной индексации.

PUT /products-v1
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "name": { "type": "text" },
      "price": { "type": "float" },
      "category": { "type": "keyword" },
      "created_at": { "type": "date" }
    }
  }
}

Добавление нового поля в описание индекса

PUT /products-v1/_mapping

Можно расширять описание новыми полями, но менять существующие типы сложнее.

PUT /products-v1/_mapping
{
  "properties": {
    "brand": { "type": "keyword" },
    "is_active": { "type": "boolean" }
  }
}

Алиас для безболезненного переключения версии индекса

POST /_aliases

Переключаем алиас с products-v1 на products-v2 без простоя для клиентов.

POST /_aliases
{
  "actions": [
    { "remove": { "index": "products-v1", "alias": "products" } },
    { "add": { "index": "products-v2", "alias": "products" } }
  ]
}

Связанные главы

Чтобы отмечать прохождение, включи трекинг в Настройки