Учебник Elasticsearch для начинающих
Elasticsearch — это поисковый движок, который превращает гигабайты текста в мгновенный, релевантный поиск. Этот курс ведёт от вопроса «зачем нужен поиск, если есть SQL LIKE» до устройства инвертированного индекса, маппинга, Query DSL, релевантности BM25, анализаторов, агрегаций и кластера из шардов и реплик. Курс для разработчиков и аналитиков, которые хотят понять, как работает поиск по сайту, анализ логов и аналитика в реальном времени — и научиться писать запросы, которые находят то, что нужно.
Курс «Elasticsearch: полнотекстовый поиск» состоит из 6 разделов и 19 уроков: Зачем нужен поисковый движок, Документы, индексы и REST API, Основы поиска, Релевантность и анализ текста, Продвинутый поиск и аналитика и Масштабирование и эксплуатация. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Зачем нужен поисковый движок
- Проблема поиска: почему LIKE в SQL не работает
Почему оператор LIKE в SQL медленный и неточный для текстового поиска и какие задачи он не решает.
- Что такое Elasticsearch и стек ELK
Знакомство с Elasticsearch как распределённым поисковым движком и стеком ELK: Elasticsearch, Logstash, Kibana, Beats.
- Инвертированный индекс — сердце поиска
Как устроен инвертированный индекс: словарь термов и постинг-листы, и почему он делает поиск по словам мгновенным.
- Проблема поиска: почему LIKE в SQL не работает
2 Документы, индексы и REST API
- Документы, индексы и маппинг
Что такое документ, индекс и маппинг в Elasticsearch, как поля получают типы и почему типы документов ушли в прошлое.
- REST API и формат запросов
Как устроен REST API Elasticsearch: HTTP-методы, путь к индексу, тело запроса JSON и эндпоинт _search.
- Индексация документов: PUT, POST и bulk
Как загружать данные в Elasticsearch: одиночная индексация через PUT и POST и массовая загрузка через эндпоинт _bulk.
- Документы, индексы и маппинг
3 Основы поиска
- match против term: анализируемые и точные поля
Главное различие в поиске Elasticsearch: match анализирует запрос для полей text, term ищет точное значение в keyword.
- bool-запросы: must, should, must_not, filter
Как комбинировать условия поиска в Elasticsearch через bool: must, should, must_not и filter и чем filter отличается от must.
- Как читать ответ _search
Структура ответа Elasticsearch на поиск: took, hits, total, _score, _source и max_score.
- match против term: анализируемые и точные поля
4 Релевантность и анализ текста
- Релевантность: scoring, TF-IDF и BM25
Как Elasticsearch оценивает релевантность: идея TF-IDF, формула BM25, частота терма, обратная частота и длина документа.
- Анализаторы и токенизация
Как Elasticsearch превращает текст в термы: анализатор, символьные фильтры, токенизатор и токен-фильтры, эндпоинт _analyze.
- Стемминг, стоп-слова и языки
Языковая обработка текста в Elasticsearch: стемминг и приведение к основе, стоп-слова и настройка анализа под русский язык.
- Релевантность: scoring, TF-IDF и BM25
5 Продвинутый поиск и аналитика
- Агрегации: аналитика поверх поиска
Агрегации Elasticsearch: метрические и бакетные, terms и avg, как считать статистику и строить дашборды поверх поиска.
- Сортировка и пагинация: from/size и search_after
Пагинация в Elasticsearch: from/size, проблема глубокой пагинации и решение через search_after для постраничного вывода.
- Подсветка, fuzzy-поиск и автодополнение
Подсветка совпадений highlight, нечёткий fuzzy-поиск через edit distance и автодополнение в Elasticsearch.
- Агрегации: аналитика поверх поиска
6 Масштабирование и эксплуатация
- Шарды, реплики и кластер
Как Elasticsearch масштабируется: первичные шарды и реплики, узлы и кластер, распределение и отказоустойчивость.
- Kibana и применения Elasticsearch
Зачем нужна Kibana и где применяют Elasticsearch: анализ логов, поиск по сайту и аналитика в реальном времени.
- ES против обычной БД и ClickHouse
Чем Elasticsearch отличается от реляционной БД и от ClickHouse: модель данных, транзакции, поиск и аналитика, когда что выбирать.
- Типичные ошибки: text/keyword, mapping explosion, тяжёлые агрегации
Главные грабли Elasticsearch: путаница text и keyword, mapping explosion от динамических полей и тяжёлые агрегации.
- Шарды, реплики и кластер