Elasticsearch 2.4 cardinality(distinct count) aggregation 返回結果不許確

問題發現

測試人員遇到個問題, 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
    }
  }
]

cardinality-aggrestion官方文檔rest

相關文章
相關標籤/搜索