Основные концепции OpenSearch
Базовые понятия
Документ
Базовая единица информации в OpenSearch, хранимая в формате JSON. Представляет собой структурированные данные в виде пар “ключ-значение”.
Индекс
Коллекция логически связанных документов. Аналог таблицы в реляционных БД.
JSON (JavaScript Object Notation)
Текстовый формат для хранения данных, использующий структуру ключ-значение. Основной формат представления данных в OpenSearch.
Маппинг
Схема индекса, определяющая:
- Типы полей документов
- Способы индексации и хранения
- Параметры анализа текста
Архитектура кластера
Узел (Node)
Отдельный сервер, являющийся частью кластера OpenSearch.
Кластер
Совокупность узлов, работающих как единая система.
Управляющий узел (Cluster Manager)
Специальный узел, координирующий кластерные операции:
- Создание/удаление индексов
- Балансировка нагрузки
- Мониторинг состояния узлов
Шард (Shard)
Часть индекса, содержащая подмножество его данных. Индексы разделяются на шарды для:
- Горизонтального масштабирования
- Распределения нагрузки
Типы шардов:
- Первичный (Primary) - основной шард с данными
- Реплика (Replica) - копия первичного шарда для:
- Отказоустойчивости
- Повышения производительности поиска
Структуры данных и хранение
Doc Values
Оптимизированная on-disk структура для:
- Сортировки
- Агрегации
- Доступа к значениям полей
Инвертированный индекс
Структура данных, отображающая термины на документы, которые их содержат. Основа полнотекстового поиска.
Lucene
Библиотека поиска, лежащая в основе OpenSearch. Отвечает за:
- Индексацию
- Хранение
- Поиск данных
Сегмент (Segment)
Неизменяемая единица хранения данных внутри шарда. Особенности:
- Создается при операции refresh
- Объединяется в процессе merge
- Оптимизирован для быстрого поиска
Операции с данными
Ингestion
Процесс добавления данных в OpenSearch. Включает:
- Прием данных
- Парсинг
- Подготовку к индексации
Индексация
Процесс организации данных для эффективного поиска:
- Анализ текста
- Построение инвертированного индекса
- Хранение документов
Пакетная индексация
Массовая загрузка документов через Bulk API:
- Высокая производительность
- Минимизация сетевых издержек
- Атомарность операций
Анализ текста
Текстовый анализ
Процесс преобразования неструктурированного текста в последовательность терминов для индексации.
Компоненты анализатора:
-
Character Filter
Обрабатывает сырой текст:- Удаление/замена символов
- HTML-разметка
-
Tokenizer
Разбивает текст на токены (слова) с метаданными:- Позиция
- Длина
- Смещение
-
Token Filter
Модифицирует токены:- Приведение к нижнему регистру
- Удаление стоп-слов
- Добавление синонимов
- Стемминг
Типы анализаторов:
-
Analyzer
Полный конвейер обработки (character filter → tokenizer → token filter) -
Normalizer
Только character filter (без токенизации)
Стемминг
Приведение слов к базовой форме (например: “running” → “run”)
Поиск и запросы
Типы запросов:
- Query DSL - основной язык сложных запросов
- Query String - упрощенный синтаксис для URL
- DQL - язык фильтрации в Dashboards
- PPL - язык для observability с pipe-синтаксисом
Контексты выполнения:
-
Query Context
Оценивает релевантность (как хорошо документ соответствует запросу) -
Filter Context
Проверяет точное соответствие (да/нет) без расчета релевантности
Типы поиска:
-
Полнотекстовый
С учетом морфологии и вариаций слов -
По ключевым словам
Точное совпадение (без анализа)
Агрегации
Механизм анализа и суммирования данных:
- Метрики (avg, sum)
- Бакетизация (histogram, date_histogram)
- Вложенные агрегации
Жизненный цикл обновлений
-
Транзакционный лог (translog)
- Операция записывается в translog
- Гарантия durability через fsync
- Подтверждение клиенту
-
In-memory буфер
- Данные добавляются в буфер Lucene
- Еще не видны для поиска
-
Refresh
- Сброс буфера в сегменты
- Данные становятся видимыми для поиска
- Без гарантии durability
-
Flush
- Запись сегментов на диск (fsync)
- Очистка translog
- Гарантия сохранности данных
-
Merge
- Объединение мелких сегментов
- Оптимизация:
- Уменьшение количества файлов
- Освобождение места
- Улучшение производительности
Критические операции
Translog
Журнал операций для гарантии сохранности данных. Особенности:
- Записывается синхронно перед подтверждением
- Ограничен по размеру
- Очищается после flush
Refresh
Периодическая операция (по умолчанию каждые 1с):
- Делает данные доступными для поиска
- Создает новые сегменты
- Не гарантирует сохранность при сбое
Flush
Операция записи на диск:
- Обеспечивает durability
- Выполняется автоматически при:
- Достижении лимита translog
- Плановом обслуживании
Merge
Фоновая оптимизация:
- Управляется политикой слияния
- Регулирует:
- Частоту слияний
- Максимальный размер сегментов
- Параллелизм операций