elasticsearch. 向导

Count API

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碎片来进行的操作。.

 
Fork me on GitHub