Elasticsearch 参考指南(Count API)

Count API

count API允许轻松执行查询并获取该查询的匹配数,它可以跨一个或多个索引执行,查询可以使用简单的查询字符串作为参数提供,也可以使用请求体中定义的查询DSL,这里有一个例子:

PUT /twitter/_doc/1?refresh
{
    "user": "kimchy"
}

GET /twitter/_doc/_count?q=user:kimchy

GET /twitter/_doc/_count
{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
在body中发送的查询必须嵌套在query键中,这与搜索api的工作原理相同。

上面的两个例子都做了同样的事情,那就是计算某个用户的twitter索引中的tweet数量,结果是:

{
    "count" : 1,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
    }
}

查询是可选的,如果没有提供查询,它将使用match_all来计算所有文档。

多索引

count API可以应用于多个索引。

请求参数

使用查询参数q执行计数时,传递的查询是使用Lucene查询解析器的查询字符串,还可以传递其他参数:

名称描述
df在查询中没有定义字段前缀时使用的默认字段
analyzer分析查询字符串时使用的分析器名称
default_operator要使用的默认操作符,可以是ANDOR,默认是OR
lenient如果设置为true,将导致基于格式的失败(比如向数字字段提供文本)被忽,默认为false
analyze_wildcard是否应该分析通配符和前缀查询,默认为false
terminate_after每个碎片的最大计数,到达后查询执行将提前终止,如果设置了,响应将具有一个布尔字段terminated_early,以指示查询执行是否确实terminated_early,默认为no terminate_after

请求体

count可以在其body中使用查询DSL来表示应该执行的查询,body内容也可以作为名为source的REST参数传递。

HTTP GET和HTTP POST都可以用body执行count,由于不是所有的客户端都支持GET使用body, POST也是允许的。

分发

计数操作在所有碎片上广播,对于每个碎片id组,将选择一个副本并对其执行,这意味着副本增加了计数的可伸缩性。

路由

可以指定路由值(一个逗号分隔的路由值列表),以控制将在哪个碎片上执行计数请求。

相关推荐