ES聚合agg缺少結果
今天ES又踩了個坑,在使用ES的時候發現agg聚合缺少了一些結果。
有個介面是批量查詢N個標籤(tag)分別關聯了多少商品,所以期望在agg中得到每個tag關聯的商品數量,所以用到了terms agg。
線上介面發現某個標籤關聯的商品數量一會是0,一會不是0,變來變去的。
一開始懷疑是不是程式碼邏輯有問題,後來經過埋點排查,很快發現某次查詢請求包含了標籤A,但是terms agg的返回結果中卻沒有標籤A,同時可以確定ES中的確有商品關聯了標籤A,這就很奇怪了。
經過積累日誌,終於觀察到問題的一個共性,這些agg聚合結果返回的bucket分桶都是10個,怎麼會這樣?原來terms agg預設只返回聚合後doc_count最多的10個bucket桶,而我期望的是返回我要統計的所有結果。
這個問題只需要給terms agg設定一個size引數即可,這個問題在stackoverflow有相關的說明:ofollow,noindex" target="_blank">https://stackoverflow.com/questions/22927098/show-all-elasticsearch-aggregation-results-buckets-and-not-just-10。
官方文件對size引數的用法也有說明:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html。
希望可以幫助到大家。