Search code examples
elasticsearchmappingdynamic-mappingelasticsearch-8

Elasticsearch Define mapping template for a certain type of index


I wanted to know if there is a way in elasticsearch 8.x to define a mapping template such that whenever an index of say the certain name comes in a mapping is applied to it on the fly.

I have a ES cluster where all my indexes follow the pattern as earnings-*, for example, earnings-2022-11, earnings-2022-12 etc. The mapping i want to apply is for a nested object. Currently, i apply the mapping as follows (manually):

PUT earnings-2022-11/_mapping
{
    "properties": {
      "my_salary": {
        "type": "nested"
      }
  }
}

I looked into the Dynamic Mapping side of things, but I see that these need to be done when I am creating an index, in my case, I am doing a bulk_index creation so I don't think this would work, or I may be wrong.


Solution

  • You need to define an index template:

    PUT _index_template/earnings_template
    {
      "index_patterns": ["earnings*"],
      "template": {
        "settings": {
          "number_of_shards": 1
        },
        "mappings": {
          "properties": {
            "my_salary": {
              "type": "nested"
            }
          }
        },
        "aliases": {
        }
      },
      "priority": 100,
      "composed_of": [],
    }