インデックステンプレートAPIの作成または更新
このドキュメントは、非推奨のレガシーインデックステンプレートについて説明しており、Elasticsearch 7.8で導入されたコンポーザブルテンプレートに置き換えられます。コンポーザブルテンプレートに関する情報は、インデックステンプレートを参照してください。
コンソール
PUT _template/template_1
{
"index_patterns": ["te*", "bar*"],
"settings": {
"number_of_shards": 1
},
"mappings": {
"_source": {
"enabled": false
},
"properties": {
"host_name": {
"type": "keyword"
},
"created_at": {
"type": "date"
}
}
}
}
リクエスト
PUT /_template/<index-template>
前提条件
- Elasticsearchのセキュリティ機能が有効になっている場合、このAPIを使用するには、
manage_index_templates
またはmanage
クラスター権限が必要です。
説明
インデックステンプレートは、新しいインデックスを作成する際に自動的に適用できる設定とmappingsを定義します。Elasticsearchは、インデックス名に一致するインデックスパターンに基づいて新しいインデックスにテンプレートを適用します。
コンポーザブルテンプレートは常にレガシーテンプレートよりも優先されます。新しいインデックスに一致するコンポーザブルテンプレートがない場合、一致するレガシーテンプレートがその順序に従って適用されます。
インデックステンプレートはインデックス作成時にのみ適用されます。インデックステンプレートの変更は既存のインデックスには影響しません。インデックス作成APIリクエストで指定された設定とマッピングは、インデックステンプレートで指定された設定やマッピングを上書きします。
インデックステンプレート内のコメント
インデックステンプレート内でCスタイルの/ /ブロックコメントを使用できます。リクエストボディのどこにでもコメントを含めることができますが、開き波括弧の前には含められません。
テンプレートの取得
詳細は、インデックステンプレートの取得(レガシー)を参照してください。
パスパラメータ
<index-template>
- (必須、文字列)作成するインデックステンプレートの名前。
クエリパラメータ
create
- (オプション、Boolean)
true
の場合、このリクエストは既存のインデックステンプレートを置き換えたり更新したりできません。デフォルトはfalse
です。 order
- (オプション、整数)インデックスが複数のテンプレートに一致する場合、Elasticsearchがこのテンプレートを適用する順序。
低いorder
値のテンプレートが最初にマージされます。高いorder
値のテンプレートは後でマージされ、低い値のテンプレートを上書きします。 master_timeout
- (オプション、時間単位)マスターノードを待機する期間。タイムアウトが切れる前にマスターノードが利用できない場合、リクエストは失敗し、エラーが返されます。デフォルトは
30s
です。リクエストがタイムアウトしないことを示すために-1
に設定することもできます。
リクエストボディ
index_patterns
- (必須、文字列の配列)作成中にインデックス名に一致するために使用されるワイルドカード式の配列。
aliases
- (オプション、オブジェクトのオブジェクト)インデックスのエイリアス。
- `````<alias>
- (必須、オブジェクト)キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートしています。
オブジェクトボディにはエイリアスのオプションが含まれます。空のオブジェクトをサポートします。- `````filter
- (オプション、クエリDSLオブジェクト)エイリアスがアクセスできるドキュメントを制限するために使用されるクエリ。
index_routing
- (オプション、文字列)インデックス操作を特定のシャードにルーティングするために使用される値。指定された場合、これはインデックス操作の
routing
値を上書きします。 is_hidden
- (オプション、Boolean)
true
の場合、エイリアスは[b10cb0563daae284.md#multi-hidden]に隠されます。デフォルトはfalse
です。エイリアスのすべてのインデックスは同じis_hidden
値を持っている必要があります。 is_write_index
- (オプション、Boolean)
true
の場合、インデックスはエイリアスの書き込みインデックスです。デフォルトはfalse
です。 routing
- (オプション、文字列)インデックス操作と検索操作を特定のシャードにルーティングするために使用される値。
search_routing
- (オプション、文字列)検索操作を特定のシャードにルーティングするために使用される値。指定された場合、これは検索操作の
routing
値を上書きします。
mappings
- (オプション、マッピングオブジェクト)インデックス内のフィールドのマッピング。指定された場合、このマッピングには次のものが含まれる可能性があります:
- フィールド名
- フィールドデータ型
- マッピングパラメータ
マッピングを参照してください。
settings
- (オプション、インデックス設定オブジェクト)インデックスの構成オプション。 インデックス設定を参照してください。
version
- (オプション、整数)インデックステンプレートを外部で管理するために使用されるバージョン番号。この番号はElasticsearchによって自動的に生成されません。
例
インデックスエイリアスを持つインデックステンプレート
インデックステンプレートにインデックスエイリアスを含めることができます。
Python
resp = client.indices.put_template(
name="template_1",
index_patterns=[
"te*"
],
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.putTemplate({
name: "template_1",
index_patterns: ["te*"],
settings: {
number_of_shards: 1,
},
aliases: {
alias1: {},
alias2: {
filter: {
term: {
"user.id": "kimchy",
},
},
routing: "shard-1",
},
"{index}-alias": {},
},
});
console.log(response);
コンソール
PUT _template/template_1
{
"index_patterns" : ["te*"],
"settings" : {
"number_of_shards" : 1
},
"aliases" : {
"alias1" : {},
"alias2" : {
"filter" : {
"term" : {"user.id" : "kimchy" }
},
"routing" : "shard-1"
},
"{index}-alias" : {}
}
}
エイリアス名の{index} プレースホルダーは、インデックス作成中にテンプレートが適用される実際のインデックス名に置き換えられます。 |
複数のテンプレートに一致するインデックス
複数のインデックステンプレートがインデックスに一致する可能性があり、この場合、設定とマッピングの両方がインデックスの最終構成にマージされます。マージの順序は、order
パラメータを使用して制御でき、低い順序が最初に適用され、高い順序がそれを上書きします。例えば:
Python
resp = client.indices.put_template(
name="template_1",
index_patterns=[
"te*"
],
order=0,
settings={
"number_of_shards": 1
},
mappings={
"_source": {
"enabled": False
}
},
)
print(resp)
resp1 = client.indices.put_template(
name="template_2",
index_patterns=[
"tes*"
],
order=1,
settings={
"number_of_shards": 1
},
mappings={
"_source": {
"enabled": True
}
},
)
print(resp1)
Js
const response = await client.indices.putTemplate({
name: "template_1",
index_patterns: ["te*"],
order: 0,
settings: {
number_of_shards: 1,
},
mappings: {
_source: {
enabled: false,
},
},
});
console.log(response);
const response1 = await client.indices.putTemplate({
name: "template_2",
index_patterns: ["tes*"],
order: 1,
settings: {
number_of_shards: 1,
},
mappings: {
_source: {
enabled: true,
},
},
});
console.log(response1);
コンソール
PUT /_template/template_1
{
"index_patterns" : ["te*"],
"order" : 0,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : false }
}
}
PUT /_template/template_2
{
"index_patterns" : ["tes*"],
"order" : 1,
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"_source" : { "enabled" : true }
}
}
上記は_source
の保存を無効にしますが、tes*
で始まるインデックスについては、_source
は引き続き有効になります。マッピングについては、マージは「深い」ものであり、特定のオブジェクト/プロパティベースのマッピングを高い順序のテンプレートに簡単に追加/上書きでき、低い順序のテンプレートが基盤を提供します。
同じ順序値を持つ複数の一致するテンプレートは、非決定的なマージ順序をもたらします。
テンプレートのバージョン管理
`````version`````パラメータは完全にオプションであり、Elasticsearchによって自動的に生成されるものではありません。
`````version`````を解除するには、テンプレートを指定せずに置き換えます。
#### Python
``````python
resp = client.indices.put_template(
name="template_1",
index_patterns=[
"my-index-*"
],
order=0,
settings={
"number_of_shards": 1
},
version=123,
)
print(resp)
`
Ruby
response = client.indices.put_template(
name: 'template_1',
body: {
index_patterns: [
'my-index-*'
],
order: 0,
settings: {
number_of_shards: 1
},
version: 123
}
)
puts response
Js
const response = await client.indices.putTemplate({
name: "template_1",
index_patterns: ["my-index-*"],
order: 0,
settings: {
number_of_shards: 1,
},
version: 123,
});
console.log(response);
コンソール
PUT /_template/template_1
{
"index_patterns" : ["my-index-*"],
"order" : 0,
"settings" : {
"number_of_shards" : 1
},
"version": 123
}
#### Php
``````php
$params = [
'name' => 'template_1',
];
$response = $client->indices()->getTemplate($params);
`
Python
resp = client.indices.get_template(
name="template_1",
filter_path="*.version",
)
print(resp)
Ruby
response = client.indices.get_template(
name: 'template_1',
filter_path: '*.version'
)
puts response
Js
const response = await client.indices.getTemplate({
name: "template_1",
filter_path: "*.version",
});
console.log(response);
コンソール
GET /_template/template_1?filter_path=*.version
コンソール-結果
{
"template_1" : {
"version" : 123
}
}