count API 能够很轻松的获取查询结果的总数. 支持一个或多个索引,或者一个或多个索引类型. 可以通过简单的URL参数的方式,或者使用"Query DSL":/guide/reference/query-dsl ,下面是示例:
$ curl -XGET 'http://localhost:9200/twitter/tweet/_count?q=user:kimchy' $ curl -XGET 'http://localhost:9200/twitter/tweet/_count' -d ' { "term" : { "user" : "kimchy" } }'
上面两种写法是完全等效的,得到的结果如下所示:
{ "count" : 1, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 } }
查询条件是可选的,如果没有指定,则默认执行 match_all
即统计所有文档的总数.
多个索引及类型
count接口可以指定一个索引里面的多个类型,或者是多个索引. 比如, 我们可以查询所有类型下符合条件为: user
字段的值为 kimchy
的文档:
$ curl -XGET 'http://localhost:9200/_count?q=user:kimchy'
或者在指定类型下进行查询:
$ curl -XGET 'http://localhost:9200/twitter/tweet,user/_count?q=user:kimchy'
另外我们还可以跨索引,指定多个索引来进行查询:
$ curl -XGET 'http://localhost:9200/kimchy,elasticsearch/_count?q=tag:wow'
或者是查询所有索引:
$ curl -XGET 'http://localhost:9200/_count?q=tag:wow'
请求参数
当通过url参数执行count查询的时候,通过参数 q
构造查询条件, 接受的条件是一个Lucene格式的querstring. 另外还有一些额外的查询参数可以指定:
名称 | 描述 |
---|---|
df | 当查询条件没有指定字段前缀的时候,默认使用的字段. |
analyzer | 指定分析器来处理query string. |
default_operator | 指定查询条件间默认的操作符(operator),可以为 AND 或者 OR . 默认为 OR . |
请求体(Request Body)
count查询还能够通过 Query DSL 的方式来执行,请求的body内容也可以通过以REST参数 source
的方式传递.
p(注). HTTP GET 和 HTTP POST 这两种方式的请求都可以用body方式传递参数来执行count查询. 因为不是所有的客户端都支持使用GET的方式的同时支持Body参数,而POST就是支持的.
分布式
count 查询操作会分发到其他的shard碎片. 每个shar碎片会挑选一个replica副本来执行查询. 也就是说replica副本数越多,扩展性也会越好.
Routing路由
routing值 (逗号分隔的routing值的集合) 能够用来控制针对的是那个shard碎片来进行的操作。.