Ответ
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" }
}
}
}
Этот запрос найдёт товары и сразу построит агрегацию (статистику) по брендам.