インデックステンプレートAPIの作成または更新

インデックステンプレートを作成または更新します。インデックステンプレートは、新しいインデックスに自動的に適用できる設定マッピング、およびエイリアスを定義します。

Python

  1. resp = client.indices.put_index_template(
  2. name="template_1",
  3. index_patterns=[
  4. "template*"
  5. ],
  6. priority=1,
  7. template={
  8. "settings": {
  9. "number_of_shards": 2
  10. }
  11. },
  12. )
  13. print(resp)

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["template*"],
  4. priority: 1,
  5. template: {
  6. settings: {
  7. number_of_shards: 2,
  8. },
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT /_index_template/template_1
  2. {
  3. "index_patterns" : ["template*"],
  4. "priority" : 1,
  5. "template": {
  6. "settings" : {
  7. "number_of_shards" : 2
  8. }
  9. }
  10. }

リクエスト

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オブジェクトを持つ一致するインデックステンプレートが必要です。インデックステンプレートの作成を参照してください。
    1. - `````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
  • (オプション、オブジェクト) 適用されるテンプレート。aliasesmappings、またはsettingsの構成を含めることができます。
    1. - `````aliases
    • (オプション、オブジェクトのオブジェクト) 追加するエイリアス。
      インデックステンプレートにdata_streamオブジェクトが含まれている場合、これらはデータストリームエイリアスです。それ以外の場合、これらはインデックスエイリアスです。データストリームエイリアスは、index_routingrouting、およびsearch_routingオプションを無視します。
      1. - `````<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

  1. resp = client.indices.put_index_template(
  2. name="template_1",
  3. index_patterns=[
  4. "template*"
  5. ],
  6. template={
  7. "settings": {
  8. "number_of_shards": 1
  9. },
  10. "aliases": {
  11. "alias1": {},
  12. "alias2": {
  13. "filter": {
  14. "term": {
  15. "user.id": "kimchy"
  16. }
  17. },
  18. "routing": "shard-1"
  19. },
  20. "{index}-alias": {}
  21. }
  22. },
  23. )
  24. print(resp)

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["template*"],
  4. template: {
  5. settings: {
  6. number_of_shards: 1,
  7. },
  8. aliases: {
  9. alias1: {},
  10. alias2: {
  11. filter: {
  12. term: {
  13. "user.id": "kimchy",
  14. },
  15. },
  16. routing: "shard-1",
  17. },
  18. "{index}-alias": {},
  19. },
  20. },
  21. });
  22. console.log(response);

コンソール

  1. PUT _index_template/template_1
  2. {
  3. "index_patterns" : ["template*"],
  4. "template": {
  5. "settings" : {
  6. "number_of_shards" : 1
  7. },
  8. "aliases" : {
  9. "alias1" : {},
  10. "alias2" : {
  11. "filter" : {
  12. "term" : {"user.id" : "kimchy" }
  13. },
  14. "routing" : "shard-1"
  15. },
  16. "{index}-alias" : {}
  17. }
  18. }
  19. }
エイリアス名の{index}プレースホルダーは、インデックス作成中にテンプレートが適用される実際のインデックス名に置き換えられます。

複数の一致するテンプレート

新しいインデックスまたはデータストリームの名前に一致する複数のインデックステンプレートがある場合、最も優先度の高いテンプレートが使用されます。例えば:

Python

  1. resp = client.indices.put_index_template(
  2. name="template_1",
  3. index_patterns=[
  4. "temp*"
  5. ],
  6. priority=0,
  7. template={
  8. "settings": {
  9. "number_of_shards": 1,
  10. "number_of_replicas": 0
  11. },
  12. "mappings": {
  13. "_source": {
  14. "enabled": False
  15. }
  16. }
  17. },
  18. )
  19. print(resp)
  20. resp1 = client.indices.put_index_template(
  21. name="template_2",
  22. index_patterns=[
  23. "template*"
  24. ],
  25. priority=1,
  26. template={
  27. "settings": {
  28. "number_of_shards": 2
  29. },
  30. "mappings": {
  31. "_source": {
  32. "enabled": True
  33. }
  34. }
  35. },
  36. )
  37. print(resp1)

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["temp*"],
  4. priority: 0,
  5. template: {
  6. settings: {
  7. number_of_shards: 1,
  8. number_of_replicas: 0,
  9. },
  10. mappings: {
  11. _source: {
  12. enabled: false,
  13. },
  14. },
  15. },
  16. });
  17. console.log(response);
  18. const response1 = await client.indices.putIndexTemplate({
  19. name: "template_2",
  20. index_patterns: ["template*"],
  21. priority: 1,
  22. template: {
  23. settings: {
  24. number_of_shards: 2,
  25. },
  26. mappings: {
  27. _source: {
  28. enabled: true,
  29. },
  30. },
  31. },
  32. });
  33. console.log(response1);

コンソール

  1. PUT /_index_template/template_1
  2. {
  3. "index_patterns" : ["temp*"],
  4. "priority" : 0,
  5. "template": {
  6. "settings" : {
  7. "number_of_shards" : 1,
  8. "number_of_replicas": 0
  9. },
  10. "mappings" : {
  11. "_source" : { "enabled" : false }
  12. }
  13. }
  14. }
  15. PUT /_index_template/template_2
  16. {
  17. "index_patterns" : ["template*"],
  18. "priority" : 1,
  19. "template": {
  20. "settings" : {
  21. "number_of_shards" : 2
  22. },
  23. "mappings" : {
  24. "_source" : { "enabled" : true }
  25. }
  26. }
  27. }
  1. 同じ優先度で重複するインデックスパターンを持つ複数のテンプレートは許可されず、同じ優先度で既存のインデックステンプレートに一致するテンプレートを作成しようとするとエラーが発生します。
  2. ### テンプレートのバージョン管理
  3. `````version`````パラメータを使用してインデックステンプレートにバージョン番号を追加できます。外部システムはこれらのバージョン番号を使用してテンプレート管理を簡素化できます。
  4. `````version`````パラメータはオプションであり、Elasticsearchによって自動的に生成または使用されることはありません。
  5. `````version`````を解除するには、テンプレートを指定せずに置き換えます。
  6. #### Python
  7. ``````python
  8. resp = client.indices.put_index_template(
  9. name="template_1",
  10. index_patterns=[
  11. "foo",
  12. "bar"
  13. ],
  14. priority=0,
  15. template={
  16. "settings": {
  17. "number_of_shards": 1
  18. }
  19. },
  20. version=123,
  21. )
  22. print(resp)
  23. `

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'template_1',
  3. body: {
  4. index_patterns: [
  5. 'foo',
  6. 'bar'
  7. ],
  8. priority: 0,
  9. template: {
  10. settings: {
  11. number_of_shards: 1
  12. }
  13. },
  14. version: 123
  15. }
  16. )
  17. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["foo", "bar"],
  4. priority: 0,
  5. template: {
  6. settings: {
  7. number_of_shards: 1,
  8. },
  9. },
  10. version: 123,
  11. });
  12. console.log(response);

コンソール

  1. PUT /_index_template/template_1
  2. {
  3. "index_patterns" : ["foo", "bar"],
  4. "priority" : 0,
  5. "template": {
  6. "settings" : {
  7. "number_of_shards" : 1
  8. }
  9. },
  10. "version": 123
  11. }
  1. ### テンプレートメタデータ
  2. `````_meta`````パラメータを使用してインデックステンプレートに任意のメタデータを追加できます。このユーザー定義オブジェクトはクラスター状態に保存されるため、短く保つことが望ましいです。
  3. `````_meta`````パラメータはオプションであり、Elasticsearchによって自動的に生成または使用されることはありません。
  4. `````_meta`````を解除するには、テンプレートを指定せずに置き換えます。
  5. #### Python
  6. ``````python
  7. resp = client.indices.put_index_template(
  8. name="template_1",
  9. index_patterns=[
  10. "foo",
  11. "bar"
  12. ],
  13. template={
  14. "settings": {
  15. "number_of_shards": 3
  16. }
  17. },
  18. meta={
  19. "description": "set number of shards to three",
  20. "serialization": {
  21. "class": "MyIndexTemplate",
  22. "id": 17
  23. }
  24. },
  25. )
  26. print(resp)
  27. `

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'template_1',
  3. body: {
  4. index_patterns: [
  5. 'foo',
  6. 'bar'
  7. ],
  8. template: {
  9. settings: {
  10. number_of_shards: 3
  11. }
  12. },
  13. _meta: {
  14. description: 'set number of shards to three',
  15. serialization: {
  16. class: 'MyIndexTemplate',
  17. id: 17
  18. }
  19. }
  20. }
  21. )
  22. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["foo", "bar"],
  4. template: {
  5. settings: {
  6. number_of_shards: 3,
  7. },
  8. },
  9. _meta: {
  10. description: "set number of shards to three",
  11. serialization: {
  12. class: "MyIndexTemplate",
  13. id: 17,
  14. },
  15. },
  16. });
  17. console.log(response);

コンソール

  1. PUT /_index_template/template_1
  2. {
  3. "index_patterns": ["foo", "bar"],
  4. "template": {
  5. "settings" : {
  6. "number_of_shards" : 3
  7. }
  8. },
  9. "_meta": {
  10. "description": "set number of shards to three",
  11. "serialization": {
  12. "class": "MyIndexTemplate",
  13. "id": 17
  14. }
  15. }
  16. }
  1. ### データストリーム定義
  2. データストリーム用のインデックステンプレートを使用するには、テンプレートに`````data_stream`````オブジェクトを含める必要があります。[インデックステンプレートの作成](beb5bf4d08d7f40c.md#create-index-template)を参照してください。
  3. #### Python
  4. ``````python
  5. resp = client.indices.put_index_template(
  6. name="template_1",
  7. index_patterns=[
  8. "logs-*"
  9. ],
  10. data_stream={},
  11. )
  12. print(resp)
  13. `

Ruby

  1. response = client.indices.put_index_template(
  2. name: 'template_1',
  3. body: {
  4. index_patterns: [
  5. 'logs-*'
  6. ],
  7. data_stream: {}
  8. }
  9. )
  10. puts response

Js

  1. const response = await client.indices.putIndexTemplate({
  2. name: "template_1",
  3. index_patterns: ["logs-*"],
  4. data_stream: {},
  5. });
  6. console.log(response);

コンソール

  1. PUT /_index_template/template_1
  2. {
  3. "index_patterns": ["logs-*"],
  4. "data_stream": { }
  5. }

エイリアス、マッピング、および設定の構成

インデックステンプレートのcomposed_ofフィールドに複数のコンポーネントテンプレートが指定されている場合、それらは指定された順序でマージされ、後のコンポーネントテンプレートが前のコンポーネントテンプレートを上書きします。親インデックステンプレートからのマッピング、設定、またはエイリアスは次にマージされます。最後に、インデックスリクエスト自体の設定がマージされます。

この例では、2つのコンポーネントテンプレートの順序がインデックスのシャード数を変更します:

Python

  1. resp = client.cluster.put_component_template(
  2. name="template_with_2_shards",
  3. template={
  4. "settings": {
  5. "index.number_of_shards": 2
  6. }
  7. },
  8. )
  9. print(resp)
  10. resp1 = client.cluster.put_component_template(
  11. name="template_with_3_shards",
  12. template={
  13. "settings": {
  14. "index.number_of_shards": 3
  15. }
  16. },
  17. )
  18. print(resp1)
  19. resp2 = client.indices.put_index_template(
  20. name="template_1",
  21. index_patterns=[
  22. "t*"
  23. ],
  24. composed_of=[
  25. "template_with_2_shards",
  26. "template_with_3_shards"
  27. ],
  28. )
  29. print(resp2)

Js

  1. const response = await client.cluster.putComponentTemplate({
  2. name: "template_with_2_shards",
  3. template: {
  4. settings: {
  5. "index.number_of_shards": 2,
  6. },
  7. },
  8. });
  9. console.log(response);
  10. const response1 = await client.cluster.putComponentTemplate({
  11. name: "template_with_3_shards",
  12. template: {
  13. settings: {
  14. "index.number_of_shards": 3,
  15. },
  16. },
  17. });
  18. console.log(response1);
  19. const response2 = await client.indices.putIndexTemplate({
  20. name: "template_1",
  21. index_patterns: ["t*"],
  22. composed_of: ["template_with_2_shards", "template_with_3_shards"],
  23. });
  24. console.log(response2);

コンソール

  1. PUT /_component_template/template_with_2_shards
  2. {
  3. "template": {
  4. "settings": {
  5. "index.number_of_shards": 2
  6. }
  7. }
  8. }
  9. PUT /_component_template/template_with_3_shards
  10. {
  11. "template": {
  12. "settings": {
  13. "index.number_of_shards": 3
  14. }
  15. }
  16. }
  17. PUT /_index_template/template_1
  18. {
  19. "index_patterns": ["t*"],
  20. "composed_of": ["template_with_2_shards", "template_with_3_shards"]
  21. }

この場合、t*に一致するインデックスは3つのプライマリシャードを持ちます。構成されたテンプレートの順序が逆になった場合、インデックスは2つのプライマリシャードを持つことになります。

マッピング定義は再帰的にマージされるため、後のマッピングコンポーネントは新しいフィールドマッピングを導入し、マッピング構成を更新できます。フィールドマッピングがすでに前のコンポーネントに含まれている場合、その定義は後のものによって完全に上書きされます。

この再帰的マージ戦略は、フィールドマッピングだけでなく、dynamic_templatesmetaのようなルートオプションにも適用されます。前のコンポーネントにdynamic_templatesブロックが含まれている場合、デフォルトでは新しいdynamic_templatesエントリが末尾に追加されます。同じキーを持つエントリがすでに存在する場合、それは新しい定義によって上書きされます。