原文 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html
根據(jù)某一項(xiàng)的每個(gè)唯一的值的聚合。 舉例:
{ "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 }, ] } }}上面 , 對(duì)于genre 這個(gè)字段,對(duì)它里面的各個(gè)值的文檔數(shù)量進(jìn)行統(tǒng)計(jì)。 doc_count_error_upper_bound 未知 sum_other_doc_count 當(dāng)有大量不同值時(shí),ES只返回?cái)?shù)量最多的項(xiàng)。這個(gè)數(shù)字表示有多少文檔的統(tǒng)計(jì)數(shù)量沒(méi)有返回。 默認(rèn)情況,對(duì)于某一項(xiàng)的聚合,只會(huì)返回?cái)?shù)量最高的10項(xiàng),通過(guò)調(diào)整size參數(shù),可以控制默認(rèn)的行為。 Elasticsearch Aggregation 不支持分頁(yè) 默認(rèn)結(jié)果是只返回 doc_count 前十的的 keys, 如果要使結(jié)果返回所有的 keys 的話, 需要加上 “size”: 0
size參數(shù)用來(lái)指定在列表中返回多少項(xiàng)。如果該項(xiàng)的值的個(gè)數(shù)要大于這個(gè)size ,那么返回的結(jié)果可能會(huì)不準(zhǔn)確,有輕微的誤差。甚至文檔數(shù)最多的那個(gè)值沒(méi)有的返回。
文檔的數(shù)量是大約的量 文檔的數(shù)量是不準(zhǔn)確的,只是一個(gè)大概值。因?yàn)槊總€(gè)分片給出它排好的前n的部分,然后再把各個(gè)分片的結(jié)果聯(lián)合成最后的結(jié)果。 官方文檔給了一個(gè)非常好的例子,還有幾張表格,說(shuō)明造成這個(gè)情況的原因。可以自己跳過(guò)去閱讀以下就明白了。這一切的原因都是因?yàn)?ES是一個(gè)分布式的存儲(chǔ)方式。
取得size的值越大,結(jié)果會(huì)越接近準(zhǔn)確,當(dāng)然這樣導(dǎo)致的負(fù)載也會(huì)越高(因?yàn)楦嗟牟樵兒凸?jié)點(diǎn)之間大數(shù)據(jù)量的傳輸)。 默認(rèn)shard_size是等于size的。如果shard_size 取更大的值,結(jié)果會(huì)更準(zhǔn)確。
計(jì)算文檔數(shù)錯(cuò)誤
有兩個(gè)錯(cuò)誤值會(huì)顯示在項(xiàng)的聚合上,第一個(gè)doc_count_error_upper_bound ,給出個(gè)沒(méi)有被算進(jìn)最后的結(jié)果的最大可能的數(shù)字。這個(gè)表明在最壞情況下,有doc_count_error_upper_bound 這么多文檔個(gè)數(shù)的一個(gè)值被遺漏了。 這就是doc_count_error_upper_bound (文檔數(shù)錯(cuò)誤上界)這個(gè)參數(shù)的意義。
每個(gè)桶里的錯(cuò)誤數(shù) 如果設(shè)置show_term_doc_count_error這個(gè)參數(shù)為ture,還會(huì)對(duì)每個(gè) bucket都顯示一個(gè)錯(cuò)誤數(shù),表示最大可能的誤差情況。
而且,如果不是按照排序的話,這個(gè)錯(cuò)誤是算不出來(lái)的,這時(shí)候,會(huì)給一個(gè)-1來(lái)表示這種有錯(cuò),但是不知道錯(cuò)誤邊界的情況。
用order參數(shù)可以做排序,默認(rèn)是按照doc_count倒序排列的。 可以改變默認(rèn)情況 “order” : { “_count” : “asc” } 這是按照doc_count升序排列 “order” : { “_term” : “asc” } 這是按照字母表升序排列。
新聞熱點(diǎn)
疑難解答
圖片精選