Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›REST API ›API индексов

API обновления схемы

Добавляет новые поля в существующий поток данных или индекс. Также можно использовать этот API для изменения параметров поиска существующих полей.

Для потоков данных эти изменения применяются ко всем базовым индексам по умолчанию.

PUT /my-index-000001/_mapping
{
  "properties": {
    "email": {
      "type": "keyword"
    }
  }
}

До версии 7.0.0 определение mappings включало имя типа. Хотя указание типов в запросах сейчас устарело, тип всё ещё может быть предоставлен, если параметр запроса include_type_name установлен. Дополнительные сведения см. в Удаление типов схемы.

Запрос

PUT /<target>/_mapping

Предварительные условия

  • Если функции безопасности Elasticsearch включены, у вас должны быть manage права доступа к индексу для целевого потока данных, индекса или псевдонима.

    [7.9] Устарело в 7.9. Если запрос направлен на индекс или псевдоним индекса, вы также можете обновить его схему с помощью create, create_doc, index или write прав доступа к индексу.

Параметры пути

<target>
(Обязательный, строка) Список потоков данных, индексов и псевдонимов, разделенных запятыми, для ограничения запроса. Поддерживаются подстановочные знаки (*). Для указания всех потоков данных и индексов опустите этот параметр или используйте * или _all.

Параметры запроса

allow_no_indices

(Необязательный, логический) Если false, запрос возвращает ошибку, если какое-либо выражение с подстановкой, псевдоним индекса или _all значение указывают только отсутствующие или закрытые индексы. Это поведение действует даже в том случае, если запрос направлен на другие открытые индексы. Например, запрос, направленный на foo*,bar*, возвращает ошибку, если индекс начинается с foo, но ни один индекс не начинается с bar.

По умолчанию false.

expand_wildcards

(Необязательный, строка) Тип индекса, с которым могут совпадать шаблоны с подстановкой. Если запрос может нацеливаться на потоки данных, этот аргумент определяет, совпадают ли выражения с подстановкой с скрытыми потоками данных. Поддерживаются значения, разделенные запятыми, например, open,hidden. Допустимые значения:

all
Совпадение с любым потоком данных или индексом, включая скрытые.
open
Совпадение с открытыми, не скрытыми индексами. Также совпадает с любым нескрытым потоком данных.
closed
Совпадение с закрытыми, не скрытыми индексами. Также совпадает с любым нескрытым потоком данных. Потоки данных не могут быть закрыты.
hidden
Совпадение со скрытыми потоками данных и скрытыми индексами. Должен быть объединён с open, closed или обоими.
none
Шаблоны с подстановкой не принимаются.

По умолчанию open.

include_type_name
[7.0.0] Устарело в 7.0.0. Типы схемы устарели. См. Удаление типов схемы. (Необязательный, логический) Если true, в теле mappings ожидается тип схемы. По умолчанию false.
ignore_unavailable
(Необязательный, логический) Если false, запрос возвращает ошибку, если он направлен на отсутствующий или закрытый индекс. По умолчанию false.
master_timeout
(Необязательный, единицы измерения времени) Время ожидания подключения к мастер-узлу. Если ответ не получен до истечения времени ожидания, запрос завершается ошибкой. По умолчанию 30s.
timeout
(Необязательный, единицы измерения времени) Время ожидания ответа. Если ответ не получен до истечения времени ожидания, запрос завершается ошибкой. По умолчанию 30s.
write_index_only
(Необязательный, логический) Если true, схема применяется только к текущему индексу записи для целевого объекта. По умолчанию false.

Тело запроса

properties

(Обязательный, объект схемы) Схема для поля. Для новых полей эта схема может включать:

  • Имя поля
  • Тип данных поля
  • Параметры схемы

Для существующих полей см. Изменение схемы существующего поля.

Примеры

Пример с единственной целью

API обновления сопоставления требует существующего потока данных или индекса. Следующий запрос API создания индекса создания индекса создаёт индекс publications без сопоставления.

PUT /publications

Следующий запрос API обновления сопоставления добавляет title, новое поле типа text, в индекс publications.

PUT /publications/_mapping
{
  "properties": {
    "title":  { "type": "text"}
  }
}

Несколько целей

API обновления сопоставления может применяться к нескольким потокам данных или индексам с помощью одного запроса. Например, вы можете обновить сопоставления для индексов my-index-000001 и my-index-000002 одновременно:

# Create the two indices
PUT /my-index-000001
PUT /my-index-000002

# Update both mappings
PUT /my-index-000001,my-index-000002/_mapping
{
  "properties": {
    "user": {
      "properties": {
        "name": {
          "type": "keyword"
        }
      }
    }
  }
}

Добавление новых свойств к существующему объектному полю

Вы можете использовать API обновления сопоставления для добавления новых свойств к существующему полю типа object. Чтобы увидеть, как это работает, попробуйте следующий пример.

Используйте API создания индекса для создания индекса с объектным полем name и внутренним текстовым полем first.

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "name": {
        "properties": {
          "first": {
            "type": "text"
          }
        }
      }
    }
  }
}

Используйте API обновления сопоставления для добавления нового внутреннего текстового поля last к полю name.

PUT /my-index-000001/_mapping
{
  "properties": {
    "name": {
      "properties": {
        "last": {
          "type": "text"
        }
      }
    }
  }
}

Добавление многополей к существующему полю

Многополя позволяют индексировать одно и то же поле различными способами. Вы можете использовать API обновления сопоставления для обновления параметра сопоставления fields и включения многополей для существующего поля.

Чтобы увидеть, как это работает, попробуйте следующий пример.

Используйте API создания индекса для создания индекса с текстовым полем city.

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text"
      }
    }
  }
}

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

Используйте API обновления сопоставления для включения многополя для поля city. Этот запрос добавляет многополе city.raw типа keyword, которое можно использовать для сортировки.

PUT /my-index-000001/_mapping
{
  "properties": {
    "city": {
      "type": "text",
      "fields": {
        "raw": {
          "type": "keyword"
        }
      }
    }
  }
}

Изменение поддерживаемых параметров сопоставления для существующего поля

Документация для каждого параметра сопоставления параметра сопоставления указывает, можно ли обновить его для существующего поля с помощью API обновления сопоставления. Например, вы можете использовать API обновления сопоставления для обновления параметра ignore_above.

Чтобы увидеть, как это работает, попробуйте следующий пример.

Используйте API создания индекса для создания индекса, содержащего поле user_id типа keyword. У поля user_id параметр ignore_above имеет значение 20.

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "user_id": {
        "type": "keyword",
        "ignore_above": 20
      }
    }
  }
}

Используйте API обновления сопоставления для изменения значения параметра ignore_above на 100.

PUT /my-index-000001/_mapping
{
  "properties": {
    "user_id": {
      "type": "keyword",
      "ignore_above": 100
    }
  }
}

Изменение сопоставления существующего поля

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

Если вам нужно изменить сопоставление поля в базовых индексах потока данных, см. Изменение сопоставлений и настроек для потока данных.

Если вам нужно изменить сопоставление поля в других индексах, создайте новый индекс с правильным сопоставлением и переиндексируйте ваши данные в этот индекс.

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

Используйте API создания индекса для создания индекса с полем user_id типа long.

PUT /my-index-000001
{
  "mappings" : {
    "properties": {
      "user_id": {
        "type": "long"
      }
    }
  }
}

Используйте API индексации для индексирования нескольких документов со значениями поля user_id.

POST /my-index-000001/_doc?refresh=wait_for
{
  "user_id" : 12345
}

POST /my-index-000001/_doc?refresh=wait_for
{
  "user_id" : 12346
}

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

PUT /my-new-index-000001
{
  "mappings" : {
    "properties": {
      "user_id": {
        "type": "keyword"
      }
    }
  }
}

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

POST /_reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

Переименование поля

Переименование поля сделает недействительными данные, уже проиндексированные под старым именем поля. Вместо этого добавьте поле alias для создания альтернативного имени поля.

Например, используйте API создания индекса для создания индекса с полем user_identifier.

PUT /my-index-000001
{
  "mappings": {
    "properties": {
      "user_identifier": {
        "type": "keyword"
      }
    }
  }
}

Используйте API обновления сопоставления для добавления псевдонима поля user_id для существующего поля user_identifier.

PUT /my-index-000001/_mapping
{
  "properties": {
    "user_id": {
      "type": "alias",
      "path": "user_identifier"
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/indices-put-mapping.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API