_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&refresh=true{ "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:
Querying on 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.