Không. Trên index nhiều shard, terms agg là kết quả xấp xỉ: mỗi shard trả về top N cục bộ rồi coordinating node gộp lại, nên một term xếp thứ 15 ở mọi shard có thể tổng lớn hơn term đang đứng top nhưng vẫn bị bỏ sót.
Response nói thẳng điều đó:
json
"aggregations": {
"by_brand": {
"doc_count_error_upper_bound": 42, // sai so toi da
"sum_other_doc_count": 1503, // so doc khong nam trong bucket tra ve
"buckets": [...]
}
}Cách giảm sai số: tăng shard_size (mặc định size * 1.5 + 10) để mỗi shard trả nhiều hơn trước khi gộp.
json
{ "terms": { "field": "brand", "size": 10, "shard_size": 200 } }Khi cần con số chính xác tuyệt đối (báo cáo tài chính, đối soát), đừng dùng Elasticsearch — chạy trên database gốc. Elasticsearch mạnh ở phân tích tương tác, không phải ở tính chính xác kế toán.
cardinality agg cũng xấp xỉ (HyperLogLog++), sai số vài phần trăm ở tập lớn.