_routing fieldedit
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 _id
or the document’s _parent ID, if present.
Custom routing patterns can be implemented by specifying a custom routing
value per document. For instance:
PUT my_index/my_type/1?routing=user1{ "title": "This is a document" } GET my_index/my_type/1?routing=user1
This document uses | |
The same |
The value of the _routing field is accessible in queries, aggregations, scripts,
and when sorting:
GET my_index/_search
{
"query": {
"terms": {
"_routing": [ "user1" ]
}
},
"aggs": {
"Routing values": {
"terms": {
"field": "_routing",
"size": 10
}
}
},
"sort": [
{
"_routing": {
"order": "desc"
}
}
],
"script_fields": {
"Routing value": {
"script": "doc['_routing']"
}
}
}
Querying on the | |
Aggregating on the | |
Sorting on the | |
Accessing the |
Searching with custom routingedit
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):
Making a routing value requirededit
When using custom routing, it is important to provide the routing value whenever indexing, getting, deleting, or updating 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:
Unique IDs with custom routingedit
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.