Elasticsearch — горизонтально масштабируемая поисковая система с полнотекстовым поиском, построенная поверх Apache Lucene. Возвращает результаты за миллисекунды благодаря инвертированному индексу. Используется для поиска по сайту, лог-аналитики (ELK Stack), мониторинга метрик и рекомендательных систем.
Как работает Elasticsearch
Данные хранятся как JSON-документы в индексах. При индексировании документа Elasticsearch строит инвертированный индекс: для каждого слова (токена) — список документов, где оно встречается. Поиск находит токены в индексе и вычисляет релевантность (TF-IDF или BM25) за O(log n).
Запросы выполняются через REST API или Query DSL (Domain Specific Language) в JSON:
GET /products/_search
{
"query": {
"match": { "description": "hosting SSD" }
}
}
Архитектура кластера
- Index — аналог таблицы: набор документов одного типа.
- Shard — горизонтальный раздел индекса. Primary shard хранит данные, replica shard — копия.
- Node — один инстанс Elasticsearch. Роли: master, data, coordinating, ingest.
- Cluster — набор нод с единым именем. Master-нода координирует шардирование.
ELK Stack и мониторинг
Классический стек для логирования и мониторинга сервера:
- Elasticsearch — хранение и поиск логов.
- Logstash — сбор, парсинг и трансформация логов из разных источников.
- Kibana — визуализация, дашборды, алерты.
Современный вариант — EFK: Elasticsearch + Fluentd + Kibana. Beats (Filebeat, Metricbeat) — лёгкие агенты (20–50 МБ RAM) для отправки данных.
История
Apache Lucene создан Дугом Каттингом (Doug Cutting) в 1999 году — Java-библиотека полнотекстового поиска. Elasticsearch написан Шаем Бановом (Shay Banon) в 2010 году как REST-обёртка поверх Lucene с горизонтальным масштабированием. Elastic N.V. основана в 2012 году, IPO в 2018. В 2021 году Elastic сменила лицензию Apache 2.0 на SSPL/Elastic License — Amazon создал форк OpenSearch.
На что обращать внимание
Elasticsearch требователен к памяти: heap JVM должен составлять 50% доступной RAM, но не более 32 ГБ. На VPS с 4 ГБ RAM — -Xms2g -Xmx2g. Часто запускают через Docker: docker run -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" elasticsearch:8. Managed-варианты: Elastic Cloud ($16/месяц за 2 ГБ heap), Amazon OpenSearch Service. Для небольших объёмов (до 10 ГБ данных) рассмотрите PostgreSQL с pg_trgm — встроенный полнотекстовый поиск без отдельного сервиса.
Настройка безопасности
Elasticsearch 8.x включает security by default: TLS и аутентификация включены при установке. В версиях до 7.x security требовала лицензии Gold или ручной настройки X-Pack. Открытый Elasticsearch без аутентификации — причина сотен утечек данных в 2017–2019 годах.
Минимальная настройка безопасности в elasticsearch.yml:
xpack.security.enabled: true
xpack.security.http.ssl.enabled: true
После запуска: bin/elasticsearch-setup-passwords auto генерирует пароли для встроенных пользователей. UFW закрывает порты 9200 и 9300 для внешних подключений: доступ только с локального IP или через VPN.