Elasticsearch Elasticsearch Index Settings

By Opster Team

Updated: Aug 28, 2023

| 2 min read

Quick links

Introduction

Elasticsearch index settings are a crucial aspect of managing and optimizing your Elasticsearch cluster. They allow you to control various parameters of your indices, such as the number of shards, replicas, and the refresh interval. This article will delve into the intricacies of Elasticsearch index settings, providing a comprehensive understanding of how to effectively utilize them.

Understanding index settings

Index settings are divided into two categories: static and dynamic. Static settings are applied at index creation and cannot be changed without reindexing or closing the index. Dynamic settings, on the other hand, can be updated on an existing index without reindexing.

Static index settings

Static settings include parameters like `number_of_shards` and `codec`. The `number_of_shards` setting determines the number of primary shards that an index should have, which is crucial for distributing data and workload across nodes. The `codec` setting, on the other hand, specifies the codec to use for compression of stored data.

Example of static index settings:

json
PUT /my_index
{
  "settings" : {
    "index" : {
      "number_of_shards" : 3,
      "codec" : "best_compression"
    }
  }
}

Dynamic index settings

Dynamic settings include parameters like `number_of_replicas` and `refresh_interval`. The `number_of_replicas` setting controls the number of replica shards (copies) that each primary shard should have. The `refresh_interval` setting determines how often the changes (newly indexed documents, updates, deletions) are made visible to search.

Example of dynamic index settings:

json
PUT /my_index/_settings
{
  "index" : {
    "number_of_replicas" : 2,
    "refresh_interval" : "1s"
  }
}

Updating index settings

To update the settings of an index, you can use the `_settings` API. For dynamic settings, you can update them directly. However, for static settings, you need to close the index before updating and then reopen it after the update.

Example of updating dynamic index settings:

json
PUT /my_index/_settings
{
  "index" : {
    "refresh_interval" : "5s"
  }
}

Example of updating static index settings:

json
POST /my_index/_close

PUT /my_index/_settings
{
  "index" : {
    "codec" : "best_compression"
  }
}

POST /my_index/_open

Index templates

Index templates allow you to define settings and mappings that will automatically be applied to new indices created. This can be particularly useful if you have a set of indices that share common settings or mappings.

Example of creating an index template:

json
PUT _template/template_1
{
  "index_patterns" : ["te*", "bar*"],
  "settings" : {
    "number_of_shards" : 1
  },
  "mappings" : {
    "_source" : { "enabled" : false }
  }
}

In this example, any newly created index whose name starts with “te” or “bar” will have the specified settings and mappings applied.