[[mapping-routing-field]] === `_routing` field A document is routed to a particular shard in an index using the following formula: shard_num = hash(_routing) % num_primary_shards The default value used for `_routing` is the document's <> or the document's <> ID, if present. Custom routing patterns can be implemented by specifying a custom `routing` value per document. For instance: [source,js] ------------------------------ PUT my_index/my_type/1?routing=user1 <1> { "title": "This is a document" } GET my_index/my_type/1?routing=user1 <2> ------------------------------ // AUTOSENSE <1> This document uses `user1` as its routing value, instead of its ID. <2> The the same `routing` value needs to be provided when <>, <>, or <> the document. The value of the `_routing` field is accessible in queries, aggregations, scripts, and when sorting: [source,js] -------------------------- GET my_index/_search { "query": { "terms": { "_routing": [ "user1" ] <1> } }, "aggs": { "Routing values": { "terms": { "field": "_routing", <2> "size": 10 } } }, "sort": [ { "_routing": { <3> "order": "desc" } } ], "script_fields": { "Routing value": { "script": "doc['_routing']" <4> } } } -------------------------- // AUTOSENSE <1> Querying on the `_routing` field (also see the <>) <2> Aggregating on the `_routing` field <3> Sorting on the `_routing` field <4> Accessing the `_routing` field in scripts (inline scripts must be <> for this example to work) ==== Searching with custom routing Custom routing can reduce the impact of searches. Instead of having to fan out a search request to all the shards in an index, the request can be sent to just the shard that matches the specific routing value (or values): [source,js] ------------------------------ GET my_index/_search?routing=user1,user2 <1> { "query": { "match": { "title": "document" } } } ------------------------------ // AUTOSENSE <1> This search request will only be executed on the shards associated with the `user1` and `user2` routing values. ==== Making a routing value required When using custom routing, it is important to provide the routing value whenever <>, <>, <>, or <> a document. Forgetting the routing value can lead to a document being indexed on more than one shard. As a safeguard, the `_routing` field can be configured to make a custom `routing` value required for all CRUD operations: [source,js] ------------------------------ PUT my_index { "mappings": { "my_type": { "_routing": { "required": true <1> } } } } PUT my_index/my_type/1 <2> { "text": "No routing value provided" } ------------------------------ // AUTOSENSE <1> Routing is required for `my_type` documents. <2> This index request throws a `routing_missing_exception`. ==== Unique IDs with custom routing When indexing documents specifying a custom `_routing`, the uniqueness of the `_id` is not guaranteed across all of the shards in the index. In fact, documents with the same `_id` might end up on different shards if indexed with different `_routing` values. It is up to the user to ensure that IDs are unique across the index.