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)
下图直接搜索文档 出现了 4 条
将size设置为全量值,来解决精度问题
将size设置为2的32次方减去1也就是分片支持的最大值,来解决精度问题。
原因:1.x版本,size等于 0 代表全部,高版本取消 0 值,所以设置了最大值(大于业务的全量值)。
全量带来的弊端就是:如果分片数据量极大,这样做会耗费巨大的CPU 资源来排序,而且可能会阻塞网络。
适用场景:对聚合精准度要求极高的业务场景,由于性能问题,不推荐使用。
elasticsearch.cn/?/question/4470