Elasticsearch大数组搜索

一、出现问题:

使用es时,我们习惯使用terms加数组作为查询条件,类似于sql中的in语句,然而当使用must+terms来筛选大容量的数组时,会出现问题,以下代码:

$body['query']['bool']['must'][] = [

     'terms' => ['vendor_user_id'=>$vendor_user_ids]

];

运行代码后发现es底层报错:

Elasticsearch大数组搜索_第1张图片

出现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]

];

你可能感兴趣的:(Elasticsearch大数组搜索)