Es id in 查询大量数据很慢

1. 运行环境

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

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

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

PHP 版本:8.2

php-fpm 版本:8.2

3). 当前系统

4). 业务环境

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

5). 相关软件版本

es:7.13

2. 问题描述?

es 查询 trems:{ “id”: [ 1,2…. ] } id 集合有 1w个, 查询要15秒
api datas/_search
Params:

{
    "query":{"terms":{"id":[2,3,4,5,6,7,8,9,10...]}},
    "_source":["id","updated_at"]
}

3. 您期望得到的结果?

希望能快速查出 1w 个数据

4. 您实际得到的结果?

实际耗时:14753 ms

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

如果ID是ES中的主键,可以用 $params['body']['query']['ids'] = ['values' => array_values($ids)];

9个月前 评论
狒狒达人 (楼主) 9个月前

array_chunk 拆,再should

9个月前 评论

1.数据量是不是太多了,1w条,什么场景下需要直接查这么多,有没有可能分批量查询

  1. 执行的适合有没有检查es上面的负载,如果负载不高,看看是不是网络问题。负载高的话建议还是拆出来分批

一般情况下如果查询,你不可能看那么多吧。导出的话,直接搞成异步就可以了

9个月前 评论
狒狒达人 (楼主) 9个月前
33qis (作者) 9个月前
狒狒达人 (楼主) 9个月前
33qis (作者) 9个月前

ES 也没那么神奇,如果存储了大量的json 文本,其实这玩意查询范围大,也很慢

9个月前 评论

]['query']['ids'] = ['values' => array_values ($ids)] 这种查主键还是很快的,我15亿级别的数据,查询100个id,基本也就是30MS

9个月前 评论
狒狒达人 (楼主) 9个月前

你先去确定100,或是300条,500条的这种效率, $chunks = array_chunk($ids, 500); foreach ($chunks as $chunk) { yield 获取IDs; }

[另:一次查询一万条ID,不是业务有坑,就是逻辑有坑]

9个月前 评论

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