Шаблоны индексов — это способ сообщить Elasticsearch, как настроить индекс при его создании.
Вы можете настроить шаблон перед созданием индекса, чтобы при создании индекса (вручную или путем индексирования документа) настройки шаблона использовались в качестве основы для создания индекса.
Существует два типа шаблонов: шаблоны индексов и шаблоны компонентов.
Elasticsearchиметь Встроенный шаблон индекса,Каждый шаблон индекса имеет приоритет 100.,Применяется к следующим шаблонам индексов:
logs-*-*
metrics-*-*
synthetics-*-*
Поэтому, когда дело доходит до встроенных шаблонов индексов, избегайте конфликтов режимов индексирования. Больше можно найти здесь
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))"
}
}
}
}
}
}
Результаты выполнения следующие
PUT _index_template/template_1
{
"index_patterns": ["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"
}
}
Результаты выполнения следующие
bar*
изиндексbar-test
PUT /bar-test
Затем получите отображение
GET /bar-test/_mapping
Результаты выполнения следующие
Поскольку шаблон может состоять не только из нескольких шаблонов компонентов, но и из самого шаблона индекса, какова будет окончательная настройка индекса? Разработчики ElasticSearch учли это и предоставили API для моделирования конфигурации объединенного шаблона.
Например, в шаблоне template_1 выше нам не нужно создавать индекс для bar* (здесь моделируется bar-pdai-test), но мы также можем смоделировать и рассчитать конфигурацию индекса:
POST /_index_template/_simulate_index/bar-pdai-test
Результаты выполнения следующие
Конечно, поскольку шаблон template_1 состоит из двух шаблонов компонентов, мы также можем смоделировать конфигурацию индекса после объединения template_1:
POST /_index_template/_simulate/template_1
Результаты выполнения следующие:
{
"template" : {
"settings" : {
"index" : {
"number_of_shards" : "1"
}
},
"mappings" : {
"runtime" : {
"day_of_week" : {
"type" : "keyword",
"script" : {
"source" : "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))",
"lang" : "painless"
}
}
},
"properties" : {
"@timestamp" : {
"type" : "date"
},
"created_at" : {
"type" : "date",
"format" : "EEE MMM dd HH:mm:ss Z yyyy"
},
"host_name" : {
"type" : "keyword"
}
}
},
"aliases" : {
"mydata" : { }
}
},
"overlapping" : [ ]
}
PUT /_component_template/ct1
{
"template": {
"settings": {
"index.number_of_shards": 2
}
}
}
PUT /_component_template/ct2
{
"template": {
"settings": {
"index.number_of_replicas": 0
},
"mappings": {
"properties": {
"@timestamp": {
"type": "date"
}
}
}
}
}
Имитировать добавление конфигурации собственного шаблона на основе двух шаблонов компонентов.
POST /_index_template/_simulate
{
"index_patterns": ["my*"],
"template": {
"settings" : {
"index.number_of_shards" : 3
}
},
"composed_of": ["ct1", "ct2"]
}
Результат выполнения следующий
{
"template" : {
"settings" : {
"index" : {
"number_of_shards" : "3",
"number_of_replicas" : "0"
}
},
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
}
}
},
"aliases" : { }
},
"overlapping" : [ ]
}