Define Elasticsearch Index Templates and Dynamic Mappings

1.5 hours
  • 3 Learning Objectives

About this Hands-on Lab

One of the most user-friendly features of Elasticsearch is dynamic mapping. Dynamic mapping is Elasticsearch’s mechanism for detecting fields and mapping them to an appropriate data type. Using index templates, we can lay out the structure of a series of indexes to adhere to specific requirements or override and control dynamic mapping behavior. With dynamic mapping, we can skip the process of explicitly defining every possible field and its data type and instead tell Elasticsearch how to detect the desired data types for us as they are discovered during indexing. As a result, dynamic mapping allows us to get up and running with our data very quickly. In this hands-on lab, you will complete the following tasks:

* Create an index template
* Define explicit field mappings
* Define dynamic field mappings

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Create the customers index template.

Use the Kibana console tool to execute the following:

PUT _template/customers
{
  "aliases": {
    "customers": {}
  },
  "index_patterns": ["customers-*"],
  "mappings": {
    "dynamic_templates": [
      {
        "long_to_integer": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      }
    ],
    "properties": {
      "year_to_date": {
        "type": "double"
      }
    }
  },
  "settings": {
    "number_of_shards": 4,
    "number_of_replicas": 3
  }
}
Create the partners index template.

Use the Kibana console tool to execute the following:

PUT _template/partners
{
  "aliases": {
    "partners": {}
  },
  "index_patterns": ["partners-*"],
  "mappings": {
    "dynamic_templates": [
      {
        "string_to_keyword": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ],
    "properties": {
      "address": {
        "type": "text"
      }
    }
  },
  "settings": {
    "number_of_shards": 4,
    "number_of_replicas": 3
  }
}
Create the leads index template.

Use the Kibana console tool to execute the following:

PUT _template/leads
{
  "aliases": {
    "leads": {}
  },
  "index_patterns": ["leads-*"],
  "mappings": {
    "dynamic_templates": [
      {
        "string_to_keyword": {
          "match_mapping_type": "string",
          "match": "lead_*",
          "unmatch": "*_text",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ],
    "properties": {
      "address": {
        "type": "text"
      },
      "estimate": {
        "type": "double"
      }
    }
  },
  "settings": {
    "number_of_shards": 4,
    "number_of_replicas": 3
  }
}

Additional Resources

You work as an Elasticsearch administrator for a data analytics company that wants to use your existing 6-node Elasticsearch cluster to analyze a few data sets. To facilitate the indexing of each data set, you need to configure the necessary index templates so that the data is stored in Elasticsearch with the correct mappings. Each template must have 4 primary shards and 3 replica shards for maximum replication across the 4 data nodes. The required templates mappings are described below:

----------+---------------+-----------+---------------------+------------------------
Name      | Index Pattern | Aliases   | Explicit Mapping    | Dynamic Mapping       
----------+---------------+-----------+---------------------+------------------------
customers | customers-*   | customers | field: year_to_date | name: long_to_integer 
          |               |           | type: double        | match mapping: long    
          |               |           |                     | mapping: integers      
----------+---------------+-----------+---------------------+------------------------
partners  | partners-*    | partners  | field: address      | name: string_to_keyword
          |               |           | type: text          | match mapping: string 
          |               |           |                     | mapping: keyword       
----------+---------------+-----------+---------------------+------------------------
leads     | leads-*       | leads     | field: address      | name: string_to_keyword
          |               |           | type: text          | match mapping: string 
          |               |           |                     | match: lead_*          
          |               |           | field: estimate     | unmatch: *_text        
          |               |           | type: double        | mapping: keyword       
----------+---------------+-----------+---------------------+------------------------

To use Kibana, navigate to the public IP address of the coordinator-1 node in your web browser and login with:

  • Username: elastic
  • Password: la_elastic_409

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?