インデックステンプレートAPIの作成または更新
インデックステンプレートを作成または更新します。インデックステンプレートは、新しいインデックスに自動的に適用できる設定、マッピング、およびエイリアスを定義します。
Python
resp = client.indices.put_index_template(
name="template_1",
index_patterns=[
"template*"
],
priority=1,
template={
"settings": {
"number_of_shards": 2
}
},
)
print(resp)
Js
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のセキュリティ機能が有効になっている場合、このAPIを使用するには、
manage_index_templates
またはmanage
クラスター権限が必要です。
説明
Elasticsearchは、インデックス名に一致するワイルドカードパターンに基づいて新しいインデックスにテンプレートを適用します。
インデックステンプレートは、データストリームまたはインデックスの作成中に適用されます。データストリームの場合、これらの設定とマッピングは、ストリームのバックインデックスが作成されるときに適用されます。
インデックス作成リクエストで指定された設定とマッピングは、インデックステンプレートで指定された設定やマッピングを上書きします。
インデックステンプレートの変更は、既存のインデックス、データストリームの既存のバックインデックスを含む、には影響しません。
インデックステンプレート内のコメント
インデックステンプレート内でCスタイルの/ /ブロックコメントを使用できます。リクエストボディのどこにでもコメントを含めることができますが、開き中括弧の前には含められません。
パスパラメータ
<index-template>
- (必須、文字列) 作成するインデックステンプレートの名前。
クエリパラメータ
create
- (オプション、Boolean)
true
の場合、このリクエストは既存のインデックステンプレートを置き換えたり更新したりできません。デフォルトはfalse
です。 master_timeout
- (オプション、時間単位) マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーが返されます。デフォルトは
30s
です。リクエストが決してタイムアウトしないことを示すために-1
に設定することもできます。
リクエストボディ
composed_of
(オプション、文字列の配列) コンポーネントテンプレート名の順序付きリスト。コンポーネントテンプレートは指定された順序でマージされ、最後に指定されたコンポーネントテンプレートが最も優先されます。例については、複数のコンポーネントテンプレートの構成を参照してください。
data_stream
- (オプション、オブジェクト) このオブジェクトが含まれている場合、テンプレートはデータストリームとそのバックインデックスを作成するために使用されます。空のオブジェクトをサポートします。
データストリームには、data_stream
オブジェクトを持つ一致するインデックステンプレートが必要です。インデックステンプレートの作成を参照してください。- `````allow_custom_routing
- (オプション、Boolean)
true
の場合、データストリームはカスタムルーティングをサポートします。デフォルトはfalse
です。 hidden
- (オプション、Boolean)
true
の場合、データストリームは非表示です。デフォルトはfalse
です。 index_mode
- (オプション、文字列) 作成するデータストリームのタイプ。有効な値は
null
(通常のデータストリーム)とtime_series
(時系列データストリーム)です。time_series
の場合、各バックインデックスにはindex.mode
インデックス設定がtime_series
になります。
index_patterns
- (必須、文字列の配列) 作成中にデータストリームとインデックスの名前に一致するワイルドカード(
*
)式の配列。
Elasticsearchには、いくつかの組み込みインデックステンプレートが含まれています。これらのテンプレートとの名前の衝突を避けるために、インデックスパターンの衝突を避けるを参照してください。 _meta
- (オプション、オブジェクト) インデックステンプレートに関するオプションのユーザーメタデータ。任意の内容を持つことができます。このマップはElasticsearchによって自動的に生成されません。
priority
- (オプション、整数) 新しいデータストリームまたはインデックスが作成されるときのインデックステンプレートの優先順位を決定します。最も優先度の高いインデックステンプレートが選択されます。優先順位が指定されていない場合、テンプレートは優先度0(最低優先度)のものとして扱われます。この数値はElasticsearchによって自動的に生成されません。
template
- (オプション、オブジェクト) 適用されるテンプレート。
aliases
、mappings
、またはsettings
の構成を含めることができます。- `````aliases
- (オプション、オブジェクトのオブジェクト) 追加するエイリアス。
インデックステンプレートにdata_stream
オブジェクトが含まれている場合、これらはデータストリームエイリアスです。それ以外の場合、これらはインデックスエイリアスです。データストリームエイリアスは、index_routing
、routing
、およびsearch_routing
オプションを無視します。- `````<alias>
- (必須、オブジェクト) キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートします。
オブジェクト本体にはエイリアスのオプションが含まれます。空のオブジェクトをサポートします。<alias>
のプロパティ filter
- (オプション、クエリDSLオブジェクト) エイリアスがアクセスできるドキュメントを制限するために使用されるクエリ。
index_routing
- (オプション、文字列) インデックス操作を特定のシャードにルーティングするために使用される値。指定された場合、これはインデックス操作の
routing
値を上書きします。 is_hidden
- (オプション、Boolean)
true
の場合、エイリアスは非表示です。デフォルトはfalse
です。エイリアスのすべてのインデックスは同じis_hidden
値を持つ必要があります。 is_write_index
- (オプション、Boolean)
true
の場合、インデックスはエイリアスの書き込みインデックスです。デフォルトはfalse
です。 routing
- (オプション、文字列) インデックス操作と検索操作を特定のシャードにルーティングするために使用される値。
search_routing
- (オプション、文字列) 検索操作を特定のシャードにルーティングするために使用される値。指定された場合、これは検索操作の
routing
値を上書きします。
mappings
- (オプション、マッピングオブジェクト) インデックス内のフィールドのマッピング。指定された場合、このマッピングには次のものが含まれる可能性があります:
- フィールド名
- フィールドデータ型
- マッピングパラメータ
マッピングを参照してください。
settings
- (オプション、インデックス設定オブジェクト) インデックスの構成オプション。 インデックス設定を参照してください。
version
- (オプション、整数) インデックステンプレートを外部で管理するために使用されるバージョン番号。この数値はElasticsearchによって自動的に生成されません。
deprecated
- (オプション、boolean) このインデックステンプレートを非推奨としてマークします。非推奨のコンポーネントを使用する非推奨でないインデックステンプレートを作成または更新する際、Elasticsearchは非推奨警告を発します。
例
インデックスエイリアスを持つインデックステンプレート
インデックステンプレートにindex aliasesを含めることができます。
Python
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)
Js
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} プレースホルダーは、インデックス作成中にテンプレートが適用される実際のインデックス名に置き換えられます。 |
複数の一致するテンプレート
新しいインデックスまたはデータストリームの名前に一致する複数のインデックステンプレートがある場合、最も優先度の高いテンプレートが使用されます。例えば:
Python
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)
Js
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 }
}
}
}
同じ優先度で重複するインデックスパターンを持つ複数のテンプレートは許可されず、同じ優先度で既存のインデックステンプレートに一致するテンプレートを作成しようとするとエラーが発生します。
### テンプレートのバージョン管理
`````version`````パラメータを使用してインデックステンプレートにバージョン番号を追加できます。外部システムはこれらのバージョン番号を使用してテンプレート管理を簡素化できます。
`````version`````パラメータはオプションであり、Elasticsearchによって自動的に生成または使用されることはありません。
`````version`````を解除するには、テンプレートを指定せずに置き換えます。
#### Python
``````python
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)
`
Ruby
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
Js
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
}
### テンプレートメタデータ
`````_meta`````パラメータを使用してインデックステンプレートに任意のメタデータを追加できます。このユーザー定義オブジェクトはクラスター状態に保存されるため、短く保つことが望ましいです。
`````_meta`````パラメータはオプションであり、Elasticsearchによって自動的に生成または使用されることはありません。
`````_meta`````を解除するには、テンプレートを指定せずに置き換えます。
#### Python
``````python
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)
`
Ruby
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
Js
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
}
}
}
### データストリーム定義
データストリーム用のインデックステンプレートを使用するには、テンプレートに`````data_stream`````オブジェクトを含める必要があります。[インデックステンプレートの作成](beb5bf4d08d7f40c.md#create-index-template)を参照してください。
#### Python
``````python
resp = client.indices.put_index_template(
name="template_1",
index_patterns=[
"logs-*"
],
data_stream={},
)
print(resp)
`
Ruby
response = client.indices.put_index_template(
name: 'template_1',
body: {
index_patterns: [
'logs-*'
],
data_stream: {}
}
)
puts response
Js
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
フィールドに複数のコンポーネントテンプレートが指定されている場合、それらは指定された順序でマージされ、後のコンポーネントテンプレートが前のコンポーネントテンプレートを上書きします。親インデックステンプレートからのマッピング、設定、またはエイリアスは次にマージされます。最後に、インデックスリクエスト自体の設定がマージされます。
この例では、2つのコンポーネントテンプレートの順序がインデックスのシャード数を変更します:
Python
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)
Js
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*
に一致するインデックスは3つのプライマリシャードを持ちます。構成されたテンプレートの順序が逆になった場合、インデックスは2つのプライマリシャードを持つことになります。
マッピング定義は再帰的にマージされるため、後のマッピングコンポーネントは新しいフィールドマッピングを導入し、マッピング構成を更新できます。フィールドマッピングがすでに前のコンポーネントに含まれている場合、その定義は後のものによって完全に上書きされます。
この再帰的マージ戦略は、フィールドマッピングだけでなく、dynamic_templates
やmeta
のようなルートオプションにも適用されます。前のコンポーネントにdynamic_templates
ブロックが含まれている場合、デフォルトでは新しいdynamic_templates
エントリが末尾に追加されます。同じキーを持つエントリがすでに存在する場合、それは新しい定義によって上書きされます。