Es Aggs 统计精确问题

1. 运行环境

docker-compose
sail + octane

1). 当前使用的 Laravel 版本?

laravel 10.x
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.2

php-fpm 版本:8.2

3). 当前系统

CentOS 8
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )

4). 业务环境

docker-compose
sail + octane
//: <> (期待信息 开发环境生产环境)
//: <> (是否使用负载均衡?请提供相关信息)

5). 相关软件版本

mysql:8 + es:7.13.4
//: <> (提供相关软件的版本,如 Nginx 、MySQL、MongoDB 等)

2. 问题描述?

es 统计查询不精确( aggs查询统计时,查询文档数量2,search 的时候查询文档4条 )
索引文档数量 190 万
索引配置
‘number_of_shards’ => 3,
‘number_of_replicas’ => 1,
‘max_result_window’ => 10000000,

3. 您期望得到的结果?

4. 您实际得到的结果?

下图这里显示文档 2 (doc_count)
Es Aggs 统计精确问题
下图直接搜索文档 出现了 4 条
Es Aggs 统计精确问题

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

将size设置为全量值,来解决精度问题
将size设置为2的32次方减去1也就是分片支持的最大值,来解决精度问题。

原因:1.x版本,size等于 0 代表全部,高版本取消 0 值,所以设置了最大值(大于业务的全量值)。

全量带来的弊端就是:如果分片数据量极大,这样做会耗费巨大的CPU 资源来排序,而且可能会阻塞网络。

适用场景:对聚合精准度要求极高的业务场景,由于性能问题,不推荐使用。

elasticsearch.cn/?/question/4470

1年前 评论
狒狒达人 (楼主) 1年前
讨论数量: 8

aggs 本来就有精度问题

1年前 评论
狒狒达人 (楼主) 1年前

将size设置为全量值,来解决精度问题
将size设置为2的32次方减去1也就是分片支持的最大值,来解决精度问题。

原因:1.x版本,size等于 0 代表全部,高版本取消 0 值,所以设置了最大值(大于业务的全量值)。

全量带来的弊端就是:如果分片数据量极大,这样做会耗费巨大的CPU 资源来排序,而且可能会阻塞网络。

适用场景:对聚合精准度要求极高的业务场景,由于性能问题,不推荐使用。

elasticsearch.cn/?/question/4470

1年前 评论
狒狒达人 (楼主) 1年前
happyqian_ah

使用单分片看看。

1年前 评论

聚合统计的总数是一个近似值,会有一定的误差,这么做的目的是为了性能,因为在海量的数据中精确统计总数是非常消耗性能的,但是很多业务场景不需要精确的结果,只要近似值,例如:统计网站一天的访问量,有点误差没关系。

正好最近在看,摘录一段。

1年前 评论
狒狒达人 (楼主) 1年前

需要精确的统计结果用CLICKHOUSE

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!