Self-hosted Apps

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 — классический источник утечек баз.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер