天天看點

Elasticsearch Index templates

Index templates 有2種:

component templates 可重用的建構塊,用于配置settings, mappings, and aliases。雖然可以使用元件模闆構造索引模闆,但它們不會直接應用于一組索引。

Index templates 索引模闆可以包含component templates的集合,也可以直接指定settings, mappings, and aliases。

以下條件适用于 index templates:

  • Composable templates 優先于 legacy templates(舊的模闆方式). 如果沒有composable template比對,  legacy template 将被應用.
  • 如果index的settings是配置了的,那麼settings的優先級高于index template 和 component templates.
  • 如果一個新的data stream 或 index 可以比對多個index template, 将選擇優先級最高的index template.

Elasticsearch内置了以下模闆,他們用于Elasticsearch自身,優先級是100:

logs-*-*

metrics-*-*

synthetics-*-*

為了避免沖突,最好把自定義的模闆跟内置模闆的命名區分開。

以下建立2個component templates

PUT _component_template/component_template1
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

PUT _component_template/runtime_component_template
{
  "template": {
    "mappings": {
      "runtime": { 
        "day_of_week": {
          "type": "keyword",
          "script": {
            "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"
          }
        }
      }
    }
  }
}      

以下建立Index templates 并把component_template1, runtime_component_template作為元件

PUT _index_template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "template": {
    "settings": {
      "number_of_shards": 1
    },
    "mappings": {
      "_source": {
        "enabled": true
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z yyyy"
        }
      }
    },
    "aliases": {
      "mydata": { }
    }
  },
  "priority": 500,
  "composed_of": ["component_template1", "runtime_component_template"], 
  "version": 3,
  "_meta": {
    "description": "my custom"
  }
}