Облачная платформаAdvanced

Загрузка данных с использованием открытых API Elasticsearch

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Во время разработки приложений, отладки или небольшой миграции данных разработчикам часто требуется быстро записать локальные файлы JSON, такие как тестовые наборы данных и файлы конфигурации, в кластер Elasticsearch. По сравнению с инструментами миграции данных, такими как Logstash и CDM, которые сложны в настройке, открытые API Elasticsearch (например, _bulk API) предоставляют более гибкую и легковесную альтернативу, особенно для разовых задач. Вы можете записывать данные через Kibana в интерактивном режиме или выполнять команды cURL на ECS для пакетной загрузки. Оба метода обеспечивают гибкую и эффективную загрузку данных в облачные кластеры Elasticsearch.

Метод 1: Загрузка данных в Kibana

В Kibana вы можете выполнять команды POST для импорта данных с использованием открытого API Elasticsearch.

Применимые сценарии: разработка и отладка, небольшие разовые записи данных и проверка синтаксиса.

  1. Войдите в Kibana.
    1. Войдите в консоль управления CSS.
    2. В панели навигации слева выберите Clusters > Elasticsearch.
    3. В списке кластеров найдите целевой кластер и нажмите Kibana в столбце Operation, чтобы войти в консоль Kibana.
    4. В левой панели навигации выберите Dev Tools.

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

  2. (Опционально) Создайте индекс и укажите пользовательскую схему, чтобы определить типы данных полей.

    Например, выполните следующую команду для создания индекса my_store:

    • Для Elasticsearch 7.x и новее:
      PUT /my_store
      {
      "settings": {
      "number_of_shards": 1
      },
      "mappings": {
      "properties": {
      "productName": {
      "type": "text"
      },
      "size": {
      "type": "keyword"
      }
      }
      }
      }
    • Для Elasticsearch версии ниже 7.x:
      PUT /my_store
      {
      "settings": {
      "number_of_shards": 1
      },
      "mappings": {
      "products": {
      "properties": {
      "productName": {
      "type": "text"
      },
      "size": {
      "type": "keyword"
      }
      }
      }
      }
      }
  3. Записать данные в индекс.

    Например, выполните следующую команду, чтобы записать запись в индекс my_store:

    • Для Elasticsearch 7.x или новее:
      POST /my_store/_bulk
      {"index":{}}
      {"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
    • Для Elasticsearch версии ниже 7.x:
      POST /my_store/products/_bulk
      {"index":{}}
      {"productName":"Latest art shirts for women in 2017 autumn","size":"L"}
  4. Проверьте результат.

    Проверьте результат. Если значение errors равно false и значение result в каждой записи массива items равно created, все записи успешно записаны.

Метод 2: Загрузка данных с помощью выполнения команд cURL на ECS

На сервере ECS вы можете выполнять команды cURL для импорта файлов через открытый API Elasticsearch.

Применимые сценарии: пакетная загрузка локальных файлов JSON с использованием скрипта автоматизации.

  1. Подготовьте ECS. Приобретите ECS, расположенный в той же VPC, что и целевой кластер Elasticsearch.
  2. Получите приватный сетевой адрес кластера.
    1. Войдите в консоль управления CSS.
    2. В левой панели навигации выберите Clusters > Elasticsearch.
    3. In the cluster list, obtain the target cluster's internal network address from the Internal Network Address column. Typical address format: <host>:<port> or <host>:<port>,<host>:<port>. Example: 10.62.179.32:9200,10.62.179.33:9200.

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

  3. Проверьте подключение. Выполните Ping частного сетевого адреса кластера Elasticsearch с ECS. Если успешно, они подключены.
  4. Подготовьте документы. Загрузите файлы JSON в ECS.

    Например, сохраните следующие данные в файл test.json и загрузите его в ECS:

    • Для Elasticsearch 7.x и новее:
      {"index": {"_index":"my_store"}}
      {"productName":"Autumn new woman blouses 2019","size":"M"}
      {"index": {"_index":"my_store"}}
      {"productName":"Autumn new woman blouses 2019","size":"L"}
    • Для Elasticsearch версии ниже 7.x:
      {"index": {"_index":"my_store","_type":"products"}}
      {"productName":"Autumn new woman blouses 2019","size":"M"}
      {"index": {"_index":"my_store","_type":"products"}}
      {"productName":"Autumn new woman blouses 2019","size":"L"}
  5. (Optional) Создайте индекс и укажите пользовательское сопоставление для определения типов данных полей.

    Например, выполните следующую команду для создания индекса my_store:

  6. Загрузите JSON‑файл в кластер Elasticsearch:

    Выполните следующую команду в каталоге ECS, где хранится JSON‑файл:

    • Для кластера без режима безопасности (HTTP): аутентификация не требуется.
      curl -X POST "http://<host>:<port>/_bulk" \
      -H 'Content-Type: application/json' \
      --data-binary @test.json
    • Для кластера в режиме безопасности, использующего HTTP: Требуется аутентификация. Если пароль содержит специальные символы, например !, заключите пароль в пару одинарных кавычек, например, -u 'admin':'Pass!word'.
      curl -X POST -u <user>:<password> "http://<host>:<port>/_bulk" \
      -H 'Content-Type: application/json' \
      --data-binary @test.json
    • Для кластера в режиме безопасности, использующего HTTPS: Требуется аутентификация. Если пароль содержит специальные символы, например !, заключите пароль в пару одинарных кавычек, например, -u 'admin':'Pass!word'. Кроме того, игнорируйте проверку SSL‑сертификата.
      curl -X POST -k -u <user>:<password> "https://<host>:<port>/_bulk" \
      -H 'Content-Type: application/json' \
      --data-binary @test.json
    Note

    If the designated cluster node is unavailable, the command will fail. If the cluster contains multiple nodes, replace <host> with the IP address of another node. If the cluster contains only one node, you have to wait until the node recovers.

  7. Проверьте результат.

    После загрузки данных возвращается следующая информация:

    {"took":204, "errors":false, "items":[...]}

    Если значение errors равно false, все данные успешно загружены.