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組,將選擇一個副本並對其執行,這意味着副本增加了計數的可伸縮性。

路由

可以指定路由值(一個逗號分隔的路由值列表),以控制將在哪個碎片上執行計數請求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章