12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- [[request-body-search-preference]]
- ==== Preference
- Controls a `preference` of the shard copies on which to execute the search. By
- default, Elasticsearch selects from the available shard copies in an
- unspecified order, taking the <<shard-allocation-awareness,allocation awareness>> and
- <<search-adaptive-replica,adaptive replica selection>> configuration into
- account. However, it may sometimes be desirable to try and route certain
- searches to certain sets of shard copies.
- A possible use case would be to make use of per-copy caches like the
- <<shard-request-cache,request cache>>. Doing this, however, runs contrary to the
- idea of search parallelization and can create hotspots on certain nodes because
- the load might not be evenly distributed anymore.
- The `preference` is a query string parameter which can be set to:
- [horizontal]
- `_only_local`::
- The operation will be executed only on shards allocated to the local
- node.
- `_local`::
- The operation will be executed on shards allocated to the local node if
- possible, and will fall back to other shards if not.
- `_prefer_nodes:abc,xyz`::
- The operation will be executed on nodes with one of the provided node
- ids (`abc` or `xyz` in this case) if possible. If suitable shard copies
- exist on more than one of the selected nodes then the order of
- preference between these copies is unspecified.
- `_shards:2,3`::
- Restricts the operation to the specified shards. (`2` and `3` in this
- case). This preference can be combined with other preferences but it
- has to appear first: `_shards:2,3|_local`
- `_only_nodes:abc*,x*yz,...`::
- Restricts the operation to nodes specified according to the
- <<cluster,node specification>>. If suitable shard copies exist on more
- than one of the selected nodes then the order of preference between
- these copies is unspecified.
- Custom (string) value::
- Any value that does not start with `_`. If two searches both give the same
- custom string value for their preference and the underlying cluster state
- does not change then the same ordering of shards will be used for the
- searches. This does not guarantee that the exact same shards will be used
- each time: the cluster state, and therefore the selected shards, may change
- for a number of reasons including shard relocations and shard failures, and
- nodes may sometimes reject searches causing fallbacks to alternative nodes.
- However, in practice the ordering of shards tends to remain stable for long
- periods of time. A good candidate for a custom preference value is something
- like the web session id or the user name.
- For instance, use the user's session ID `xyzabc123` as follows:
- [source,console]
- ------------------------------------------------
- GET /_search?preference=xyzabc123
- {
- "query": {
- "match": {
- "title": "elasticsearch"
- }
- }
- }
- ------------------------------------------------
- This can be an effective strategy to increase usage of e.g. the request cache for
- unique users running similar searches repeatedly by always hitting the same cache, while
- requests of different users are still spread across all shard copies.
- NOTE: The `_only_local` preference guarantees only to use shard copies on the
- local node, which is sometimes useful for troubleshooting. All other options do
- not _fully_ guarantee that any particular shard copies are used in a search,
- and on a changing index this may mean that repeated searches may yield
- different results if they are executed on different shard copies which are in
- different refresh states.
|