Что такое Elasticsearch и чем он отличается от традиционных БД?

«Что такое Elasticsearch и чем он отличается от традиционных БД?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Elasticsearch — это распределённый, RESTful поисковый и аналитический движок с открытым исходным кодом, построенный на Apache Lucene. Он предназначен для горизонтального масштабирования, работы в реальном времени и решения задач, с которыми плохо справляются реляционные БД: нечёткий полнотекстовый поиск, анализ логов, агрегация больших объёмов данных.

Основные отличия от реляционных СУБД (например, PostgreSQL): Аспект Elasticsearch Традиционная СУБД (OLTP)
Основная цель Поиск и аналитика Транзакции и целостность данных
Модель данных Документ-ориентированная (JSON) Реляционная (таблицы, строки, столбцы)
Схема Динамическая (mapping), может быть строгой Жёсткая, предопределённая схема
Запросы Полнотекстовый поиск, нечёткое совпадение, агрегации Точечные выборки по ключам, JOIN-операции
Транзакции Ограниченная поддержка (недавние версии) Полная поддержка ACID
Масштабирование Горизонтальное (шардирование) из коробки Чаще вертикальное или сложное горизонтальное

Типичные сценарии использования:

  • Поиск на сайте/в приложении: С учётом морфологии, синонимов и опечаток.
  • Логи и мониторинг (ELK/EFK стек): Приём, хранение и визуализация логов с Kibana.
  • Аналитика в реальном времени: Агрегация данных (средние, суммы, гистограммы) по миллионам документов.

Пример простого поискового запроса:

GET /products/_search
{
  "query": {
    "multi_match": {
      "query": "беспроводные наушники",
      "fields": ["title", "description"]
    }
  },
  "aggs": {
    "by_brand": {
      "terms": { "field": "brand.keyword" }
    }
  }
}

Этот запрос найдёт товары и сразу построит агрегацию (статистику) по брендам.