測試人員遇到個問題, ES在查詢的時候實際數量只有4條, 作去重計算的時候結果是5, 實際查詢以下圖: html
圖中能夠看出 doc_count: 4, dc_hostname:5 這就有點奇怪了,doc_count只有4, 去重以後的count怎麼會是5elasticsearch
通過ES官方文檔的檢查, 問題出如今ES 2.4, ES對cardinality的計算是放在內存中的, 若是內存不夠, 結果可能就不許確, 內存的控制是基於參數precision_threshold, 若是count大於該值, 返回結果就不許確, 大約是5%的偏差, 若是count小於該值, 返回結果基因而接近準確ide
ES 2.4 參數說明 precision_threshold默認值是 聚合層數(aggregations)*分桶(buckets)數量, 最大值是40000測試
參數調整 調整precision_threshold參數爲3000ui
"aggregations": { "dc_hostname": { "cardinality": { "field": "hostname", "precision_threshold": 3000 } } }
"buckets": [ { "key": "AM項目監控", "doc_count": 4, "dc_hostname": { "value": 4 } } ]