Основные концепции OpenSearch

Полное руководство по 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:

  • Высокая производительность
  • Минимизация сетевых издержек
  • Атомарность операций

Анализ текста

Текстовый анализ
Процесс преобразования неструктурированного текста в последовательность терминов для индексации.

Компоненты анализатора:

  1. Character Filter
    Обрабатывает сырой текст:

    • Удаление/замена символов
    • HTML-разметка
  2. Tokenizer
    Разбивает текст на токены (слова) с метаданными:

    • Позиция
    • Длина
    • Смещение
  3. 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)
  • Вложенные агрегации

Жизненный цикл обновлений

  1. Транзакционный лог (translog)

    • Операция записывается в translog
    • Гарантия durability через fsync
    • Подтверждение клиенту
  2. In-memory буфер

    • Данные добавляются в буфер Lucene
    • Еще не видны для поиска
  3. Refresh

    • Сброс буфера в сегменты
    • Данные становятся видимыми для поиска
    • Без гарантии durability
  4. Flush

    • Запись сегментов на диск (fsync)
    • Очистка translog
    • Гарантия сохранности данных
  5. Merge

    • Объединение мелких сегментов
    • Оптимизация:
      • Уменьшение количества файлов
      • Освобождение места
      • Улучшение производительности

Критические операции

Translog
Журнал операций для гарантии сохранности данных. Особенности:

  • Записывается синхронно перед подтверждением
  • Ограничен по размеру
  • Очищается после flush

Refresh
Периодическая операция (по умолчанию каждые 1с):

  • Делает данные доступными для поиска
  • Создает новые сегменты
  • Не гарантирует сохранность при сбое

Flush
Операция записи на диск:

  • Обеспечивает durability
  • Выполняется автоматически при:
    • Достижении лимита translog
    • Плановом обслуживании

Merge
Фоновая оптимизация:

  • Управляется политикой слияния
  • Регулирует:
    • Частоту слияний
    • Максимальный размер сегментов
    • Параллелизм операций