Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.17] ›REST API ›API индексов

API создания или обновления шаблона индекса

Справочник по новым API

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

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

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "template*"
    ],
    priority=1,
    template={
        "settings": {
            "number_of_shards": 2
        }
    },
)
print(resp)
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["template*"],
  priority: 1,
  template: {
    settings: {
      number_of_shards: 2,
    },
  },
});
console.log(response);
PUT /_index_template/template_1
{
  "index_patterns" : ["template*"],
  "priority" : 1,
  "template": {
    "settings" : {
      "number_of_shards" : 2
    }
  }
}

Запрос

PUT /_index_template/<index-template>

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

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

Описание

Elasticsearch применяет шаблоны к новым индексам на основе шаблона с подстановкой, который соответствует имени индекса.

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

Настройки и схемы, указанные в запросе создания индекса, переопределяют любые настройки или схемы, указанные в шаблоне индекса.

Изменения в шаблонах индексов не влияют на существующие индексы, включая существующие базовые индексы потока данных.

Комментарии в шаблонах индексов

Вы можете использовать комментарии в стиле C /* */ в шаблонах индексов. Вы можете вставлять комментарии в любом месте тела запроса, кроме места перед открывающей фигурной скобкой.

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

<index-template>
(Обязательный, строка) Имя шаблона индекса для создания.

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

create
(Необязательный, логический тип) Если true, этот запрос не может заменить или обновить существующие шаблоны индексов. По умолчанию false.
master_timeout
(Необязательный, единицы измерения времени) Период ожидания узла мастера. Если узел мастера недоступен до истечения срока ожидания, запрос завершается неудачей и возвращается ошибка. По умолчанию 30s. Также можно установить значение -1, чтобы указать, что запрос никогда не должен ожидать.

Тело запроса

composed_of
(Необязательно, массив строк) Упорядоченный список имён шаблонов компонентов. Шаблоны компонентов объединяются в указанном порядке, что означает, что последний указанный шаблон компонента имеет наивысший приоритет. См. Создание нескольких шаблонов компонентов для примера.
data_stream

(Необязательно, объект) Если этот объект включён, шаблон используется для создания потоков данных и их базовых индексов. Поддерживается пустой объект.

Потоки данных требуют соответствующего шаблона индекса с объектом data_stream. См. создание шаблона индекса.

Свойства data_stream
allow_custom_routing
(Необязательно, Булево) Если true, поток данных поддерживает настраиваемое маршрутизирование. По умолчанию false.
hidden
(Необязательно, Булево) Если true, поток данных скрыт. По умолчанию false.
index_mode

(Необязательно, строка) Тип потока данных для создания. Допустимые значения: null (стандартный поток данных), time_series (поток данных временных рядов) и logsdb (поток данных журналов).

Шаблон index_mode устанавливает index.mode базового индекса.

index_patterns

(Обязательно, массив строк) Массив выражений с подстановкой (*), используемых для соответствия именам потоков данных и индексов во время создания.

Elasticsearch включает несколько встроенных шаблонов индексов. Чтобы избежать конфликтов имён с этими шаблонами, см. Избегайте конфликтов имён шаблонов индексов.

_meta
(Необязательно, объект) Необязательные пользовательские метаданные о шаблоне индекса. Может содержать любые данные. Эта карта не генерируется автоматически Elasticsearch.
priority
(Необязательно, целое число) Приоритет для определения приоритета шаблона индекса при создании нового потока данных или индекса. Выбирается шаблон индекса с наивысшим приоритетом. Если приоритет не указан, шаблон рассматривается как имеющий приоритет 0 (самый низкий приоритет). Это число не генерируется автоматически Elasticsearch.
template

(Необязательно, объект) Шаблон для применения. Он может необязательно включать настройки aliases, mappings или settings.

Свойства template
aliases

(Необязательно, объект объектов) псевдонимы для добавления.

Если шаблон индекса включает объект data_stream, это псевдонимы потоков данных. В противном случае это псевдонимы индексов. Псевдонимы потоков данных игнорируют параметры index_routing, routing и search_routing.

Свойства объектов aliases
<alias>

(Обязательно, объект) Ключ — имя псевдонима. Имена псевдонимов индексов поддерживают поддержку даты.

Тело объекта содержит параметры для псевдонима. Поддерживается пустой объект.

Свойства <alias>
filter
(Необязательно, объект Query DSL) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
index_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на определённый фрагмент. Если указано, это переопределяет значение routing для операций индексирования.
is_hidden
(Необязательно, Булево) Если true, псевдоним скрыт. По умолчанию false. Все индексы для псевдонима должны иметь одинаковое значение is_hidden.
is_write_index
(Необязательно, Булево) Если true, индекс является записываемым индексом для псевдонима. По умолчанию false.
routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определённый фрагмент.
search_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций поиска на определённый фрагмент. Если указано, это переопределяет значение routing для операций поиска.
mappings

(Необязательно, объект отображения) Отображение полей в индексе. Если указано, это отображение может включать:

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

См. Отображение.

settings
(Необязательно, объект настроек индекса) Параметры конфигурации для индекса. См. Настройки индекса.
version
(Необязательно, целое число) Номер версии, используемый для управления шаблонами индексов внешним образом. Это число не генерируется автоматически Elasticsearch.
deprecated
(Необязательно, логическое значение) Отмечает этот шаблон индекса как устаревший. При создании или обновлении не устаревшего шаблона индекса, использующего устаревшие компоненты, Elasticsearch выведет предупреждение об устаревании.

Примеры

Шаблон индекса с псевдонимами индексов

Вы можете включить псевдонимы индексов в шаблон индекса.

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "template*"
    ],
    template={
        "settings": {
            "number_of_shards": 1
        },
        "aliases": {
            "alias1": {},
            "alias2": {
                "filter": {
                    "term": {
                        "user.id": "kimchy"
                    }
                },
                "routing": "shard-1"
            },
            "{index}-alias": {}
        }
    },
)
print(resp)
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["template*"],
  template: {
    settings: {
      number_of_shards: 1,
    },
    aliases: {
      alias1: {},
      alias2: {
        filter: {
          term: {
            "user.id": "kimchy",
          },
        },
        routing: "shard-1",
      },
      "{index}-alias": {},
    },
  },
});
console.log(response);
PUT _index_template/template_1
{
  "index_patterns" : ["template*"],
  "template": {
    "settings" : {
        "number_of_shards" : 1
    },
    "aliases" : {
        "alias1" : {},
        "alias2" : {
            "filter" : {
                "term" : {"user.id" : "kimchy" }
            },
            "routing" : "shard-1"
        },
        "{index}-alias" : {} 
    }
  }
}

заполнитель {index} в имени псевдонима будет заменён фактическим именем индекса, к которому применяется шаблон, во время создания индекса.

Несколько соответствующих шаблонов

Если несколько шаблонов индексов соответствуют имени нового индекса или потока данных, используется шаблон с наивысшим приоритетом. Например:

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "temp*"
    ],
    priority=0,
    template={
        "settings": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        },
        "mappings": {
            "_source": {
                "enabled": False
            }
        }
    },
)
print(resp)

resp1 = client.indices.put_index_template(
    name="template_2",
    index_patterns=[
        "template*"
    ],
    priority=1,
    template={
        "settings": {
            "number_of_shards": 2
        },
        "mappings": {
            "_source": {
                "enabled": True
            }
        }
    },
)
print(resp1)
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["temp*"],
  priority: 0,
  template: {
    settings: {
      number_of_shards: 1,
      number_of_replicas: 0,
    },
    mappings: {
      _source: {
        enabled: false,
      },
    },
  },
});
console.log(response);

const response1 = await client.indices.putIndexTemplate({
  name: "template_2",
  index_patterns: ["template*"],
  priority: 1,
  template: {
    settings: {
      number_of_shards: 2,
    },
    mappings: {
      _source: {
        enabled: true,
      },
    },
  },
});
console.log(response1);
PUT /_index_template/template_1
{
  "index_patterns" : ["temp*"],
  "priority" : 0,
  "template": {
    "settings" : {
      "number_of_shards" : 1,
      "number_of_replicas": 0
    },
    "mappings" : {
      "_source" : { "enabled" : false }
    }
  }
}

PUT /_index_template/template_2
{
  "index_patterns" : ["template*"],
  "priority" : 1,
  "template": {
    "settings" : {
      "number_of_shards" : 2
    },
    "mappings" : {
      "_source" : { "enabled" : true }
    }
  }
}

Для индексов, начинающихся с template*, _source будет включено, и индекс будет иметь две первичные фрагменты и одну реплика, потому что будет применён только template_2.

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

Версионирование шаблонов

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

Параметр version является необязательным и не генерируется и не используется Elasticsearch автоматически.

Чтобы сбросить version, замените шаблон без указания этого параметра.

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "foo",
        "bar"
    ],
    priority=0,
    template={
        "settings": {
            "number_of_shards": 1
        }
    },
    version=123,
)
print(resp)
response = client.indices.put_index_template(
  name: 'template_1',
  body: {
    index_patterns: [
      'foo',
      'bar'
    ],
    priority: 0,
    template: {
      settings: {
        number_of_shards: 1
      }
    },
    version: 123
  }
)
puts response
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["foo", "bar"],
  priority: 0,
  template: {
    settings: {
      number_of_shards: 1,
    },
  },
  version: 123,
});
console.log(response);
PUT /_index_template/template_1
{
  "index_patterns" : ["foo", "bar"],
  "priority" : 0,
  "template": {
    "settings" : {
        "number_of_shards" : 1
    }
  },
  "version": 123
}

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

Метаданные шаблона

Вы можете использовать параметр _meta, чтобы добавить произвольные метаданные в шаблон индекса. Этот пользовательский объект хранится в состоянии кластера, поэтому лучше его не делать слишком громоздким.

Параметр _meta является необязательным и не генерируется и не используется Elasticsearch автоматически.

Чтобы сбросить _meta, замените шаблон без указания этого параметра.

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "foo",
        "bar"
    ],
    template={
        "settings": {
            "number_of_shards": 3
        }
    },
    meta={
        "description": "set number of shards to three",
        "serialization": {
            "class": "MyIndexTemplate",
            "id": 17
        }
    },
)
print(resp)
response = client.indices.put_index_template(
  name: 'template_1',
  body: {
    index_patterns: [
      'foo',
      'bar'
    ],
    template: {
      settings: {
        number_of_shards: 3
      }
    },
    _meta: {
      description: 'set number of shards to three',
      serialization: {
        class: 'MyIndexTemplate',
        id: 17
      }
    }
  }
)
puts response
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["foo", "bar"],
  template: {
    settings: {
      number_of_shards: 3,
    },
  },
  _meta: {
    description: "set number of shards to three",
    serialization: {
      class: "MyIndexTemplate",
      id: 17,
    },
  },
});
console.log(response);
PUT /_index_template/template_1
{
  "index_patterns": ["foo", "bar"],
  "template": {
    "settings" : {
        "number_of_shards" : 3
    }
  },
  "_meta": {
    "description": "set number of shards to three",
    "serialization": {
      "class": "MyIndexTemplate",
      "id": 17
    }
  }
}

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

Определение потока данных

Для использования шаблона индекса для потоков данных шаблон должен содержать объект data_stream. См. создание шаблона индекса.

resp = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "logs-*"
    ],
    data_stream={},
)
print(resp)
response = client.indices.put_index_template(
  name: 'template_1',
  body: {
    index_patterns: [
      'logs-*'
    ],
    data_stream: {}
  }
)
puts response
const response = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["logs-*"],
  data_stream: {},
});
console.log(response);
PUT /_index_template/template_1
{
  "index_patterns": ["logs-*"],
  "data_stream": { }
}

Компоновка псевдонимов, отображений и настроек

Когда в поле composed_of шаблона индекса указано несколько компонентных шаблонов, они объединяются в указанном порядке, то есть последующие компонентные шаблоны перезаписывают предыдущие. Затем объединяются любые отображения, настройки или псевдонимы из родительского шаблона индекса. Наконец, объединяются любые настройки, указанные в самом запросе индекса.

В этом примере порядок двух компонентных шаблонов изменяет количество фрагментов индекса:

resp = client.cluster.put_component_template(
    name="template_with_2_shards",
    template={
        "settings": {
            "index.number_of_shards": 2
        }
    },
)
print(resp)

resp1 = client.cluster.put_component_template(
    name="template_with_3_shards",
    template={
        "settings": {
            "index.number_of_shards": 3
        }
    },
)
print(resp1)

resp2 = client.indices.put_index_template(
    name="template_1",
    index_patterns=[
        "t*"
    ],
    composed_of=[
        "template_with_2_shards",
        "template_with_3_shards"
    ],
)
print(resp2)
const response = await client.cluster.putComponentTemplate({
  name: "template_with_2_shards",
  template: {
    settings: {
      "index.number_of_shards": 2,
    },
  },
});
console.log(response);

const response1 = await client.cluster.putComponentTemplate({
  name: "template_with_3_shards",
  template: {
    settings: {
      "index.number_of_shards": 3,
    },
  },
});
console.log(response1);

const response2 = await client.indices.putIndexTemplate({
  name: "template_1",
  index_patterns: ["t*"],
  composed_of: ["template_with_2_shards", "template_with_3_shards"],
});
console.log(response2);
PUT /_component_template/template_with_2_shards
{
  "template": {
    "settings": {
      "index.number_of_shards": 2
    }
  }
}

PUT /_component_template/template_with_3_shards
{
  "template": {
    "settings": {
      "index.number_of_shards": 3
    }
  }
}

PUT /_index_template/template_1
{
  "index_patterns": ["t*"],
  "composed_of": ["template_with_2_shards", "template_with_3_shards"]
}

В этом случае индекс, соответствующий t*, будет иметь три первичных фрагмента. Если порядок составленных шаблонов был изменён, индекс будет иметь две первичные фрагмента.

Определения отображений объединяются рекурсивно, что означает, что последующие компоненты отображения могут вводить новые отображения полей и обновлять конфигурацию отображения. Если отображение поля уже содержится в предыдущем компоненте, его определение будет полностью перезаписано последующим компонентом.

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

© 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/8.17/indices-put-template.html

Spec-Zone.ru

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