原文 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
根據某一項的每個唯一的值的聚合。 舉例:
{ "aggs" : { "genres" : { "terms" : { "field" : "genre" } } }}返回
{ "aggregations" : { "genres" : { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets" : [ { "key" : "jazz", "doc_count" : 10 }, { "key" : "rock", "doc_count" : 10 }, { "key" : "electronic", "doc_count" : 10 }, ] } }}上面 , 對于genre 這個字段,對它里面的各個值的文檔數量進行統計。 doc_count_error_upper_bound 未知 sum_other_doc_count 當有大量不同值時,ES只返回數量最多的項。這個數字表示有多少文檔的統計數量沒有返回。 默認情況,對于某一項的聚合,只會返回數量最高的10項,通過調整size參數,可以控制默認的行為。 Elasticsearch Aggregation 不支持分頁 默認結果是只返回 doc_count 前十的的 keys, 如果要使結果返回所有的 keys 的話, 需要加上 “size”: 0
size參數用來指定在列表中返回多少項。如果該項的值的個數要大于這個size ,那么返回的結果可能會不準確,有輕微的誤差。甚至文檔數最多的那個值沒有的返回。
文檔的數量是大約的量 文檔的數量是不準確的,只是一個大概值。因為每個分片給出它排好的前n的部分,然后再把各個分片的結果聯合成最后的結果。 官方文檔給了一個非常好的例子,還有幾張表格,說明造成這個情況的原因。可以自己跳過去閱讀以下就明白了。這一切的原因都是因為 ES是一個分布式的存儲方式。
取得size的值越大,結果會越接近準確,當然這樣導致的負載也會越高(因為更多的查詢和節點之間大數據量的傳輸)。 默認shard_size是等于size的。如果shard_size 取更大的值,結果會更準確。
計算文檔數錯誤
有兩個錯誤值會顯示在項的聚合上,第一個doc_count_error_upper_bound ,給出個沒有被算進最后的結果的最大可能的數字。這個表明在最壞情況下,有doc_count_error_upper_bound 這么多文檔個數的一個值被遺漏了。 這就是doc_count_error_upper_bound (文檔數錯誤上界)這個參數的意義。
每個桶里的錯誤數 如果設置show_term_doc_count_error這個參數為ture,還會對每個 bucket都顯示一個錯誤數,表示最大可能的誤差情況。
而且,如果不是按照排序的話,這個錯誤是算不出來的,這時候,會給一個-1來表示這種有錯,但是不知道錯誤邊界的情況。
用order參數可以做排序,默認是按照doc_count倒序排列的。 可以改變默認情況 “order” : { “_count” : “asc” } 這是按照doc_count升序排列 “order” : { “_term” : “asc” } 這是按照字母表升序排列。
新聞熱點
疑難解答