Полное руководство по управлению индексами Elasticsearch с помощью команд API

Освойте управление индексами Elasticsearch с помощью этого полного руководства по командам API. Узнайте, как тщательно создавать индексы с пользовательскими сопоставлениями и настройками, используя `PUT`, комплексно просматривать их конфигурации и детали с помощью `GET`, и безопасно удалять ненужные индексы, используя `DELETE`. Эта статья предоставляет практические примеры, лучшие практики и важные предупреждения, позволяя вам эффективно контролировать жизненный цикл ваших данных в Elasticsearch для достижения оптимальной производительности и управления ресурсами.

33 просмотров

Полное руководство по управлению индексами Elasticsearch с помощью команд API

Elasticsearch — это мощный, распределенный механизм поиска и аналитики, который организует данные в индексы. Индекс, по сути, представляет собой логическое пространство имен, которое указывает на один или несколько физических шардов, где хранятся ваши документы. Эффективное управление этими индексами имеет фундаментальное значение для поддержания работоспособности, производительности и масштабируемости вашего кластера Elasticsearch. В этом руководстве мы рассмотрим основные команды API для управления жизненным циклом индекса, что позволит вам уверенно создавать индексы, проверять их и удалять.

Эффективное управление индексами критически важно по нескольким причинам: оно позволяет определить, как хранятся и ищутся ваши данные, оптимизировать производительность путем настройки таких параметров, как шарды и реплики, а также управлять хранилищем путем удаления устаревших или ненужных данных. Освоение этих команд является краеугольным навыком для любого администратора или разработчика Elasticsearch, обеспечивая надежность и гибкость вашей инфраструктуры данных.

Понимание индексов Elasticsearch

Прежде чем углубляться в команды API, важно понять, что такое индекс Elasticsearch. Проще говоря, индекс похож на базу данных в реляционной системе баз данных. Это совокупность документов, обладающих схожими характеристиками и часто общей целью. Каждый документ в индексе имеет тип (хотя в новых версиях Elasticsearch один индекс обычно представляет один тип, часто _doc) и уникальный идентификатор. Индексы состоят из одного или нескольких шардов, которые представляют собой автономные низкоуровневые индексы Lucene. Эти шарды могут быть распределены по нескольким узлам, обеспечивая масштабируемость и отказоустойчивость.

Ключевые компоненты индекса включают:
* Mappings (Сопоставления): Определяют схему для документов в индексе, указывая имена полей, типы данных (например, text, keyword, date, integer) и то, как они должны индексироваться.
* Settings (Настройки): Конфигурируют различные операционные аспекты, такие как количество первичных шардов, шардов реплик, интервалы обновления и настройки анализа.
* Aliases (Псевдонимы): Виртуальные имена, которые могут указывать на один или несколько индексов, предоставляя приложениям гибкость для взаимодействия с индексами без знания их фактических имен.

Создание индексов Elasticsearch

Создание индекса — первый шаг к хранению данных в Elasticsearch. Вы можете создать индекс с настройками по умолчанию или, что более распространено, определить пользовательские сопоставления и настройки, адаптированные к вашим данным и требованиям поиска. Для этой цели используется метод PUT.

Базовое создание индекса

Чтобы создать индекс с настройками по умолчанию, вы просто отправляете запрос PUT на желаемое имя индекса.

PUT /my_first_index

После успешного создания Elasticsearch возвращает подтверждение:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "my_first_index"
}

Это создает индекс с одним первичным шардом и одним шардом реплики по умолчанию, а также включает динамическое сопоставление (это означает, что Elasticsearch будет выводить типы полей по мере индексации документов).

Создание индексов с пользовательскими сопоставлениями и настройками

Для большего контроля вы можете определить явные сопоставления для ваших полей и указать настройки индекса, такие как количество шардов и реплик. Это имеет решающее значение для оптимизации производительности поиска и обеспечения целостности данных.

Пример: Пользовательские сопоставления и настройки

Давайте создадим индекс с именем products, определим типы полей для данных о продуктах и настроим его с 3 первичными шардами и 2 шард-репликами.

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  },
  "mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      },
      "name": {
        "type": "text",
        "fields": {
          "raw": {
            "type": "keyword"
          }
        }
      },
      "description": {
        "type": "text"
      },
      "price": {
        "type": "float"
      },
      "stock": {
        "type": "integer"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
      },
      "available": {
        "type": "boolean"
      }
    }
  }
}
  • settings: Определяет конфигурации на уровне кластера для индекса. Здесь мы устанавливаем number_of_shards (количество первичных шардов) и number_of_replicas (количество шардов реплик).
  • mappings: Содержит определение схемы. Мы определяем properties (свойства) для каждого поля:
    • product_id: тип keyword для точного сопоставления.
    • name: text для полнотекстового поиска, с дополнительным подобъектом keyword (name.raw) для точной сортировки или агрегаций.
    • description: text для полнотекстового поиска.
    • price: float для числовых операций.
    • stock: integer для числовых операций.
    • created_at: date с указанием форматов для обеспечения правильного разбора.
    • available: boolean для значений true/false.

Совет: Тщательно планируйте свои сопоставления. Как только индекс создан и заполнен, изменить тип данных существующего поля напрямую невозможно без повторной индексации данных. Заранее продумайте типы данных и аналитические потребности.

Просмотр деталей и настроек индекса

После создания индекса вам часто потребуется проверить его конфигурацию, чтобы подтвердить настройки, проверить сопоставления или устранить неполадки. Команда GET — ваш основной инструмент для извлечения исчерпывающей информации об индексе.

Получение всей информации об индексе

Чтобы получить все настройки, сопоставления, псевдонимы и другие метаданные для определенного индекса, используйте команду GET с именем индекса.

GET /products

Это вернет большой JSON-объект, содержащий подробную информацию, в том числе:

{
  "products": {
    "aliases": {},
    "mappings": {
      "properties": {
        "available": {
          "type": "boolean"
        },
        "created_at": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
        },
        "description": {
          "type": "text"
        },
        "name": {
          "type": "text",
          "fields": {
            "raw": {
              "type": "keyword"
            }
          }
        },
        "price": {
          "type": "float"
        },
        "product_id": {
          "type": "keyword"
        },
        "stock": {
          "type": "integer"
        }
      }
    },
    "settings": {
      "index": {
        "routing": {
          "allocation": {
            "include": {
              "_tier_preference": "data_content"
            }
          }
        },
        "number_of_shards": "3",
        "provided_name": "products",
        "creation_date": "1701234567890",
        "number_of_replicas": "2",
        "uuid": "some_uuid",
        "version": {
          "created": "7170099"
        }
      }
    }
  }
}

Получение информации о конкретном индексе

Вы можете получить только определенные части конфигурации индекса, добавив их к URL.

  • Получить только сопоставления:
    bash GET /products/_mapping

  • Получить только настройки:
    bash GET /products/_settings

  • Получить только псевдонимы:
    bash GET /products/_alias

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

Просмотр нескольких индексов

Вы также можете получить информацию для нескольких индексов, разделив их имена запятыми или используя подстановочные знаки.

  • Конкретные несколько индексов:
    bash GET /products,my_first_index/_settings

  • Все индексы, начинающиеся с 'p':
    bash GET /p*/_mapping

  • Все индексы (использовать с осторожностью в продакшене):
    bash GET /_all # или GET /*

Примечание: При использовании GET /_all или GET /* будьте готовы к потенциально очень большому объему данных, если в вашем кластере много индексов. Используйте это с осторожностью, особенно в производственных средах.

Удаление индексов Elasticsearch

Удаление индекса — это необратимая операция, которая удаляет все связанные с ним документы и метаданные. Обычно это делается для освобождения дискового пространства, удаления старых данных или очистки тестовых индексов. Для этой критически важной операции используется метод DELETE.

Удаление одного индекса

Чтобы удалить один индекс, используйте команду DELETE, за которой следует имя индекса.

DELETE /my_first_index

Успешное удаление вернет:

{
  "acknowledged": true
}

Предупреждение: Это действие необратимо. Как только индекс удален, его данные исчезнут навсегда, если у вас нет снимка (snapshot) или резервной копии. Всегда дважды проверяйте имя индекса перед выполнением команды DELETE, особенно в производственных средах.

Удаление нескольких индексов

Подобно GET, вы можете удалить несколько индексов, указав их через запятую или используя подстановочные знаки.

  • Удаление нескольких конкретных индексов:
    bash DELETE /my_old_index_1,my_old_index_2

  • Удаление всех индексов, соответствующих шаблону:
    bash DELETE /logstash-2023-*
    Эта команда удалит все индексы, имена которых начинаются с logstash-2023-.

  • Удаление всех индексов (крайняя осторожность!):
    bash DELETE /_all # или DELETE /*

    Опасно! Удаление _all или * удалит каждый отдельный индекс из вашего кластера. Это чрезвычайно разрушительная операция, и ее никогда не следует выполнять в производственной среде, если вы явно не намерены очистить весь кластер и у вас есть надежный план восстановления. Многие производственные кластеры отключают эту функцию, чтобы предотвратить случайную потерю данных.

Рекомендации по удалению

  • Всегда проверяйте: Перед удалением используйте GET, чтобы просмотреть индекс (или индексы с помощью подстановочного знака), который вы собираетесь удалить. Это подтвердит, что вы нацелены на правильные данные.
    bash GET /logstash-2023-*
    Просмотрите результат, и если он соответствует вашим ожиданиям, переходите к DELETE.
  • Разрешения: Убедитесь, что пользователь или роль, выполняющая команду DELETE, имеет необходимые разрешения. В производственной среде ограничьте разрешения на DELETE только авторизованным персоналом.
  • Снимки (Snapshots): Всегда делайте снимок своего кластера перед выполнением любых крупномасштабных удалений, особенно если данные критически важны.

Сравнение и управление жизненным циклом

Эти три команды (PUT для создания, GET для проверки, DELETE для удаления) составляют основу ручного управления жизненным циклом индекса. Они используются на разных этапах:

  • Создание (PUT): В начале жизни индекса, определяя его структуру и первоначальную конфигурацию.
  • Проверка (GET): На протяжении всего активного жизненного цикла индекса для мониторинга, устранения неполадок и верификации.
  • Удаление (DELETE): В конце полезного срока службы индекса для освобождения ресурсов и управления политикой хранения данных.

Хотя эти команды отлично подходят для специальных или программных задач управления, Elasticsearch также предоставляет мощные функции для автоматизированного управления жизненным циклом индекса (ILM). Политики ILM позволяют определять правила для автоматического перехода индексов через фазы (hot, warm, cold, delete) на основе возраста, размера или других критериев, включая такие операции, как сжатие (shrinking), принудительное слияние (force merging) и, в конечном итоге, удаление. Для крупномасштабного или долгосрочного хранения данных ILM является рекомендуемым подходом для автоматизации фазы DELETE.

Заключение

Управление индексами Elasticsearch с помощью команд API — незаменимый навык для всех, кто работает с этой платформой. Вы узнали, как создавать индексы с точными сопоставлениями и настройками с помощью PUT, тщательно проверять их конфигурации с помощью GET и безопасно удалять их с помощью DELETE. Понимая и правильно применяя эти команды, вы получаете детальный контроль над хранением данных и можете гарантировать, что ваш кластер Elasticsearch остается эффективным, хорошо организованным и производительным.

Всегда помните о важности тщательного планирования сопоставлений, усердной проверки перед удалением и использования встроенных функций Elasticsearch, таких как ILM, для продвинутого автоматизированного управления жизненным циклом. С помощью этих инструментов и передовых практик вы будете хорошо подготовлены к освоению администрирования индексов Elasticsearch. Для дальнейшего изучения углубитесь в расширенные параметры сопоставления, шаблоны индексов и всю мощь политик управления жизненным циклом индексов Elasticsearch.