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

このドキュメントは、非推奨のレガシーインデックステンプレートについて説明しており、Elasticsearch 7.8で導入されたコンポーザブルテンプレートに置き換えられます。コンポーザブルテンプレートに関する情報は、インデックステンプレートを参照してください。

インデックステンプレートを作成または更新します。

コンソール

  1. PUT _template/template_1
  2. {
  3. "index_patterns": ["te*", "bar*"],
  4. "settings": {
  5. "number_of_shards": 1
  6. },
  7. "mappings": {
  8. "_source": {
  9. "enabled": false
  10. },
  11. "properties": {
  12. "host_name": {
  13. "type": "keyword"
  14. },
  15. "created_at": {
  16. "type": "date"
  17. }
  18. }
  19. }
  20. }

リクエスト

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
  • (オプション、オブジェクトのオブジェクト)インデックスのエイリアス。
    1. - `````<alias>
    • (必須、オブジェクト)キーはエイリアス名です。インデックスエイリアス名は日付数学をサポートしています。
      オブジェクトボディにはエイリアスのオプションが含まれます。空のオブジェクトをサポートします。
      1. - `````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

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

Js

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

コンソール

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

複数のテンプレートに一致するインデックス

複数のインデックステンプレートがインデックスに一致する可能性があり、この場合、設定とマッピングの両方がインデックスの最終構成にマージされます。マージの順序は、orderパラメータを使用して制御でき、低い順序が最初に適用され、高い順序がそれを上書きします。例えば:

Python

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

Js

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

コンソール

  1. PUT /_template/template_1
  2. {
  3. "index_patterns" : ["te*"],
  4. "order" : 0,
  5. "settings" : {
  6. "number_of_shards" : 1
  7. },
  8. "mappings" : {
  9. "_source" : { "enabled" : false }
  10. }
  11. }
  12. PUT /_template/template_2
  13. {
  14. "index_patterns" : ["tes*"],
  15. "order" : 1,
  16. "settings" : {
  17. "number_of_shards" : 1
  18. },
  19. "mappings" : {
  20. "_source" : { "enabled" : true }
  21. }
  22. }

上記は_sourceの保存を無効にしますが、tes*で始まるインデックスについては、_sourceは引き続き有効になります。マッピングについては、マージは「深い」ものであり、特定のオブジェクト/プロパティベースのマッピングを高い順序のテンプレートに簡単に追加/上書きでき、低い順序のテンプレートが基盤を提供します。

同じ順序値を持つ複数の一致するテンプレートは、非決定的なマージ順序をもたらします。

テンプレートのバージョン管理

  1. `````version`````パラメータは完全にオプションであり、Elasticsearchによって自動的に生成されるものではありません。
  2. `````version`````を解除するには、テンプレートを指定せずに置き換えます。
  3. #### Python
  4. ``````python
  5. resp = client.indices.put_template(
  6. name="template_1",
  7. index_patterns=[
  8. "my-index-*"
  9. ],
  10. order=0,
  11. settings={
  12. "number_of_shards": 1
  13. },
  14. version=123,
  15. )
  16. print(resp)
  17. `

Ruby

  1. response = client.indices.put_template(
  2. name: 'template_1',
  3. body: {
  4. index_patterns: [
  5. 'my-index-*'
  6. ],
  7. order: 0,
  8. settings: {
  9. number_of_shards: 1
  10. },
  11. version: 123
  12. }
  13. )
  14. puts response

Js

  1. const response = await client.indices.putTemplate({
  2. name: "template_1",
  3. index_patterns: ["my-index-*"],
  4. order: 0,
  5. settings: {
  6. number_of_shards: 1,
  7. },
  8. version: 123,
  9. });
  10. console.log(response);

コンソール

  1. PUT /_template/template_1
  2. {
  3. "index_patterns" : ["my-index-*"],
  4. "order" : 0,
  5. "settings" : {
  6. "number_of_shards" : 1
  7. },
  8. "version": 123
  9. }
  1. #### Php
  2. ``````php
  3. $params = [
  4. 'name' => 'template_1',
  5. ];
  6. $response = $client->indices()->getTemplate($params);
  7. `

Python

  1. resp = client.indices.get_template(
  2. name="template_1",
  3. filter_path="*.version",
  4. )
  5. print(resp)

Ruby

  1. response = client.indices.get_template(
  2. name: 'template_1',
  3. filter_path: '*.version'
  4. )
  5. puts response

Js

  1. const response = await client.indices.getTemplate({
  2. name: "template_1",
  3. filter_path: "*.version",
  4. });
  5. console.log(response);

コンソール

  1. GET /_template/template_1?filter_path=*.version

APIは次の応答を返します:

コンソール-結果

  1. {
  2. "template_1" : {
  3. "version" : 123
  4. }
  5. }