Elasticsearch
Распределённый поисковый и аналитический движок: хранит JSON-документы, ищет по тексту за миллисекунды и лежит в основе ELK-стека для логов.
Что такое Elasticsearch
Elasticsearch — распределённый поисковый и аналитический движок. Вы кладёте в него JSON-документы, он строит по ним инвертированный индекс и позволяет искать по тексту с ранжированием, фильтрами и агрегациями — быстро и на объёмах, которые обычная СУБД уже не тянет.
Построен поверх библиотеки Apache Lucene, написан на Java, управляется целиком через REST API. Компанию-разработчика зовут Elastic; сокращённо продукт часто называют просто «эластик», а «elastic search» через пробел — то же самое, просто опечатка.
Главное, что стоит понять сразу: Elasticsearch — не замена PostgreSQL. Это не транзакционная база, а поисковый индекс рядом с основной базой. Источником правды он обычно не является.
Инвертированный индекс — в чём фокус
Обычный индекс БД отвечает на вопрос «где строка с таким id». Инвертированный индекс отвечает на вопрос «в каких документах встречается слово». Для каждого слова хранится список документов — поэтому LIKE '%слово%' по миллионам строк работает секунды, а Elasticsearch — миллисекунды.
Плюс к этому текст перед индексацией прогоняется через анализаторы: разбивается на токены, приводится к нижнему регистру, обрезается до основ слова. Поэтому запрос «серверы» находит «сервер», а поиск терпим к опечаткам и морфологии.
Ключевые понятия
| Понятие | Что это |
|---|---|
| Document | единица данных, JSON-объект |
| Index | набор документов со схожей структурой |
| Mapping | схема полей: что текст, что число, что keyword |
| Shard | шард — часть индекса; так индекс переживает рост |
| Replica | копия шарда на другом узле: отказоустойчивость плюс чтение |
| Node / Cluster | процесс и кластер из процессов |
Про шарды есть частая ошибка: их число задаётся при создании индекса и потом не меняется. Наплодить сотни мелких шардов «на вырост» — верный способ убить производительность, каждый шард стоит памяти и файловых дескрипторов.
Где применяют
- Поиск по сайту и каталогу — исходная задача: релевантность, фасеты, автодополнение.
- Логи, ELK-стек — самое массовое применение сегодня. ELK = Elasticsearch + Logstash + Kibana, плюс Beats как сборщики на хостах. Логи со всех серверов складываются в один индекс, и по ним можно искать глазами и строить графики.
- Аналитика и Big Data — агрегации по большим объёмам событий.
- Безопасность — на Elasticsearch и его форках построены SIEM-решения, включая Wazuh.
- Векторный поиск — тип поля
dense_vectorи kNN позволяют искать по эмбеддингам; отсюда роль Elasticsearch в RAG и AI-поиске.
История с лицензией и OpenSearch
Знать это нужно, чтобы понимать, почему в интернете два похожих продукта.
До 2021 года Elasticsearch распространялся под Apache 2.0. Затем Elastic сменила лицензию на SSPL / Elastic License — реакция на то, что облачные провайдеры продавали Elasticsearch как сервис, ничего не возвращая проекту. Лицензия перестала считаться open source, и AWS сделала форк — OpenSearch, оставшийся под Apache 2.0. В 2024 году Elastic добавила возможность использовать Elasticsearch под AGPLv3, вернув ему статус open source, но два продукта к тому моменту уже разошлись.
Практический вывод: OpenSearch — живой независимый проект, API у них близкие, но не идентичные, и клиентские библиотеки уже несовместимы.
Elasticsearch vs ClickHouse
Обоих берут под аналитику логов, и выбор неочевиден.
| Elasticsearch | ClickHouse | |
|---|---|---|
| Сильная сторона | полнотекстовый поиск, «найти иголку» | агрегации по колонкам, «посчитать по всем» |
| Данные | JSON, схема гибкая | таблицы, схема строгая |
| Язык | Query DSL (JSON) | SQL |
| Место на диске | больше — индекс дорогой | меньше — сильное сжатие |
| Порог входа | ниже | выше |
Если задача — «искать по тексту логов», Elasticsearch. Если «строить отчёты по миллиардам событий» — ClickHouse дешевле по железу.
Что нужно от сервера
Elasticsearch прожорлив, и экономить на нём не выходит. Три вещи, которые надо знать до установки:
- Heap — половина RAM, но не больше ~32 ГБ. Это официальная рекомендация: выше 32 ГБ JVM теряет сжатые указатели, и увеличение heap делает только хуже. Вторая половина памяти нужна не «про запас», а под файловый кеш ОС — на нём и держится скорость поиска.
- Только SSD/NVMe. На HDD индексация упирается в диск моментально.
vm.max_map_count=262144— без этого параметра ядра узел просто не стартует в Docker. Самая частая ошибка первой установки.
Порты: 9200 — HTTP API, 9300 — межузловой transport. Наружу 9200 не выставляют: исторически незащищённые кластеры Elasticsearch — классический источник утечек баз.
Связанные термины
- ClickHouse — альтернатива для аналитики по большим объёмам
- Шардирование — как индекс распределяется по узлам
- Репликация — как кластер переживает потерю узла
- Реляционные и NoSQL БД — куда Elasticsearch попадает по классификации
- Эмбеддинг — основа векторного поиска
- Wazuh — SIEM, построенный на форке OpenSearch
Готовы запустить GPU-задачу?
Запустить GPU-сервер