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 |
要使用的默認操作符,可以是AND 或OR ,默認是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組,將選擇一個副本並對其執行,這意味着副本增加了計數的可伸縮性。
路由
可以指定路由值(一個逗號分隔的路由值列表),以控制將在哪個碎片上執行計數請求。