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 GETHTTP POST 这两种方式的请求都可以用body方式传递参数来执行count查询. 因为不是所有的客户端都支持使用GET的方式的同时支持Body参数,而POST就是支持的.

分布式

count 查询操作会分发到其他的shard碎片. 每个shar碎片会挑选一个replica副本来执行查询. 也就是说replica副本数越多,扩展性也会越好.

Routing路由

routing值 (逗号分隔的routing值的集合) 能够用来控制针对的是那个shard碎片来进行的操作。.

 
Fork me on GitHub