Index alias

An alias is a virtual index name that can point to one or more indices.

If your data is spread across multiple indices, rather than keeping track of which indices to query, you can create an alias and query it instead.

For example, if you’re storing logs into indices based on the month and you frequently query the logs for the previous two months, you can create a last_2_months alias and update the indices it points to each month.

Because you can change the indices an alias points to at any time, referring to indices using aliases in your applications allows you to reindex your data without any downtime.


Table of contents

  1. Create aliases
  2. Add or remove indices
  3. Manage aliases
  4. Add aliases at index creation
  5. Create filtered aliases
  6. Index alias options

Create aliases

To create an alias, use a POST request:

POST _aliases

Use the actions method to specify the list of actions that you want to perform. This command creates an alias named alias1 and adds index-1 to this alias:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index-1",
        "alias": "alias1"
      }
    }
  ]
}

You should see the following response:

{
   "acknowledged": true
}

If this request fails, make sure the index that you’re adding to the alias already exists.

To check if alias1 refers to index-1, run the following command:

GET alias1

Add or remove indices

You can perform multiple actions in the same _aliases operation. For example, the following command removes index-1 and adds index-2 to alias1:

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "index-1",
        "alias": "alias1"
      }
    },
    {
      "add": {
        "index": "index-2",
        "alias": "alias1"
      }
    }
  ]
}

The add and remove actions occur atomically, which means that at no point will alias1 point to both index-1 and index-2.

You can also add indices based on an index pattern:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index*",
        "alias": "alias1"
      }
    }
  ]
}

Manage aliases

To list the mapping of aliases to indices, run the following command:

GET _cat/aliases?v

Sample response

alias     index   filter    routing.index   routing.search
alias1    index-1   *             -                 -

To check which indices an alias points to, run the following command:

GET _alias/alias1

Sample response

{
  "index-2": {
    "aliases": {
      "alias1": {}
    }
  }
}

Conversely, to find which alias points to a specific index, run the following command:

GET /index-2/_alias/*

To check if an alias exists, run the following command:

HEAD /alias1/_alias/

Add aliases at index creation

You can add an index to an alias as you create the index:

PUT index-1
{
  "aliases": {
    "alias1": {}
  }
}

Create filtered aliases

You can create a filtered alias to access a subset of documents or fields from the underlying indices.

This command adds only a specific timestamp field to alias1:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "index-1",
        "alias": "alias1",
        "filter": {
          "term": {
            "timestamp": "1574641891142"
          }
        }
      }
    }
  ]
}

Index alias options

You can specify the options shown in the following table.

Option Valid values Description Required
index String The name of the index that the alias points to. Yes
alias String The name of the alias. No
filter Object Add a filter to the alias. No
routing String Limit search to an associated shard value. You can specify search_routing and index_routing independently. No
is_write_index String Specify the index that accepts any write operations to the alias. If this value is not specified, then no write operations are allowed. No