[[search-count]] == Count API The count API allows to easily execute a query and get the number of matches for that query. It can be executed across one or more indices. The query can either be provided using a simple query string as a parameter, or using the <> defined within the request body. Here is an example: [source,js] -------------------------------------------------- PUT /twitter/_doc/1?refresh { "user": "kimchy" } GET /twitter/_doc/_count?q=user:kimchy GET /twitter/_doc/_count { "query" : { "term" : { "user" : "kimchy" } } } -------------------------------------------------- //CONSOLE NOTE: The query being sent in the body must be nested in a `query` key, same as the <> works Both examples above do the same thing, which is count the number of tweets from the `twitter` index for a certain user. The result is: [source,js] -------------------------------------------------- { "count" : 1, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 } } -------------------------------------------------- // TESTRESPONSE The query is optional, and when not provided, it will use `match_all` to count all the docs. [float] === Multi index The count API can be applied to <>. [float] === Request Parameters When executing count using the query parameter `q`, the query passed is a query string using Lucene query parser. There are additional parameters that can be passed: [cols="<,<",options="header",] |======================================================================= |Name |Description |`df` |The default field to use when no field prefix is defined within the query. |`analyzer` |The analyzer name to be used when analyzing the query string. |`default_operator` |The default operator to be used, can be `AND` or `OR`. Defaults to `OR`. |`lenient` |If set to true will cause format based failures (like providing text to a numeric field) to be ignored. Defaults to false. |`analyze_wildcard` |Should wildcard and prefix queries be analyzed or not. Defaults to `false`. |`terminate_after` |The maximum count for each shard, upon reaching which the query execution will terminate early. If set, the response will have a boolean field `terminated_early` to indicate whether the query execution has actually terminated_early. Defaults to no terminate_after. |======================================================================= [float] === Request Body The count can use the <> within its body in order to express the query that should be executed. The body content can also be passed as a REST parameter named `source`. Both HTTP GET and HTTP POST can be used to execute count with body. Since not all clients support GET with body, POST is allowed as well. [float] === Distributed The count operation is broadcast across all shards. For each shard id group, a replica is chosen and executed against it. This means that replicas increase the scalability of count. [float] === Routing The routing value (a comma separated list of the routing values) can be specified to control which shards the count request will be executed on.