美文网首页
Elasticsearch大数组搜索

Elasticsearch大数组搜索

作者: 杍劼 | 来源:发表于2018-01-03 17:28 被阅读455次

    一、出现问题:

    使用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]

    ];

    相关文章

      网友评论

          本文标题:Elasticsearch大数组搜索

          本文链接:https://www.haomeiwen.com/subject/usqknxtx.html