在做es 聚合查詢時,發現數據不準確:根據name 聚合,查詢出wang jie有5個文檔,然後。根據這個姓名查詢,確有7個文檔
說明,第一次聚合查詢不準確
如下圖:
第一次:
對應dsl
第二次:
對應dsl
於是網上搜索一波,看了幾篇文章,大概總結一下
es 的數據是在shard上存儲的,一個索引默認是5個分片,es 聚合查詢的時候,是先在每個分片取出shard_size個數據,然後再彙總每個分片的數據,最後再取size 個數據,其中 size 參數規定了最後返回的term個數(默認是10個)
shard_size 參數規定了每個分片上返回的個數(默認(size * 1.5 + 10),
所以聚合查詢存在一定誤差
解決辦法:
(1)加大size 的值可以減少誤差
(2)將所有數據存在一個shard 上,這樣的話就不存在誤差了(適用於少數據量)
(3)增大shard_size的值,缺點就是,彙總的時候會有瓶頸
gr參考“https://niyanchun.com/term-aggregation-accuracy-in-es.html