[[search]] = Search APIs [partintro] -- Most search APIs are <>, with the exception of the <> endpoints. [float] [[search-routing]] == Routing When executing a search, it will be broadcast to all the index/indices shards (round robin between replicas). Which shards will be searched on can be controlled by providing the `routing` parameter. For example, when indexing tweets, the routing value can be the user name: [source,js] -------------------------------------------------- POST /twitter/tweet?routing=kimchy { "user" : "kimchy", "postDate" : "2009-11-15T14:12:12", "message" : "trying out Elasticsearch" } -------------------------------------------------- // CONSOLE In such a case, if we want to search only on the tweets for a specific user, we can specify it as the routing, resulting in the search hitting only the relevant shard: [source,js] -------------------------------------------------- POST /twitter/tweet/_search?routing=kimchy { "query": { "bool" : { "must" : { "query_string" : { "query" : "some query string here" } }, "filter" : { "term" : { "user" : "kimchy" } } } } } -------------------------------------------------- // CONSOLE // TEST[continued] The routing parameter can be multi valued represented as a comma separated string. This will result in hitting the relevant shards where the routing values match to. [float] [[stats-groups]] == Stats Groups A search can be associated with stats groups, which maintains a statistics aggregation per group. It can later be retrieved using the <> API specifically. For example, here is a search body request that associate the request with two different groups: [source,js] -------------------------------------------------- POST /_search { "query" : { "match_all" : {} }, "stats" : ["group1", "group2"] } -------------------------------------------------- // CONSOLE // TEST[setup:twitter] [float] [[global-search-timeout]] == Global Search Timeout Individual searches can have a timeout as part of the <>. Since search requests can originate from many sources, Elasticsearch has a dynamic cluster-level setting for a global search timeout that applies to all search requests that do not set a timeout in the <>. The default value is no global timeout. The setting key is `search.default_search_timeout` and can be set using the <> endpoints. Setting this value to `-1` resets the global search timeout to no timeout. -- include::search/search.asciidoc[] include::search/uri-request.asciidoc[] include::search/request-body.asciidoc[] include::search/search-template.asciidoc[] include::search/search-shards.asciidoc[] include::search/suggesters.asciidoc[] include::search/multi-search.asciidoc[] include::search/count.asciidoc[] include::search/validate.asciidoc[] include::search/explain.asciidoc[] include::search/profile.asciidoc[] include::search/percolate.asciidoc[] include::search/field-stats.asciidoc[]