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

Обновлено: 24 июня 2026 г. в 17:01

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

средний

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

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

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

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

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

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

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

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

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

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

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

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

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

Рамка выбора и редакторский фокус

Фокус главы

поисковом индексе, релевантности выдачи и чтении почти в реальном времени

Профиль нагрузки

Начинайте с специализированного запроса: аналитика, поиск, временные ряды, графовые обходы, векторное извлечение или мониторинговые метрики.

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

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

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

Опасность — превратить специализированный слой в универсальную БД и потерять границы консистентности, свежести и владения данными.

Связать дальше

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

Источник

Wikipedia: Elasticsearch

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

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

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

Elastic: Elasticsearch

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

Открыть сайт

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

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

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

2010

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

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

2012

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

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

2018

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

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

Январь 2021

Уход от Apache 2.0

Начиная с версии 7.11 Elastic переводит Elasticsearch и Kibana с Apache 2.0 на двойную лицензию SSPL/Elastic License, чтобы ограничить облачных провайдеров, продающих движок как сервис.

2021

Форк OpenSearch

AWS отвечает форком OpenSearch под Apache 2.0 (анонс в апреле, релиз 1.0 в июле); в 2024 году проект передан Linux Foundation в виде OpenSearch Software Foundation.

2024

Возврат опции открытой лицензии

В августе 2024 года Elastic добавляет AGPLv3 третьим вариантом лицензии для Elasticsearch и Kibana: ядро снова доступно под открытой лицензией по определению Open Source Initiative.

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

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

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

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

Узлы берут на себя разные роли: одни координируют запросы, другие хранят данные и переносят шарды при перебалансировке. От распределения ролей зависит, упрётся ли кластер в один перегруженный узел.

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

Записанный документ виден в поиске не сразу, а после очередного цикла обновления индекса. Чем чаще обновление, тем свежее выдача и тем дороже она по пропускной способности — это место для осознанного компромисса.

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

Порядок результатов задаёт формула 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" } }
  ]
}

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

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