一、出现问题:
使用es时,我们习惯使用terms加数组作为查询条件,类似于sql中的in语句,然而当使用must+terms来筛选大容量的数组时,会出现问题,以下代码:
$body['query']['bool']['must'][] = [
'terms' => ['vendor_user_id'=>$vendor_user_ids]
];
运行代码后发现es底层报错:
出现too_many_clauses错误,提示不能超过1024条数据,由于代码将两个数组集合合并,数组长度已经超过1024
二、解决方案:
1.更改es配置:
在配置文件Elasticsearch.yuml中修改配置(设置过大会导致搜索速度变慢):
index.query.bool.max_clause_count: 10240
2.使用filter关键字:
除了修改配置的方式之外,还可以直接将must关键字替换成filter,兼容大数组:
$body['query']['bool']['filter'][] = [
'terms' => ['vendor_user_id' => $vendor_user_ids]
];