Elasticsearch大数组搜索

一、出现问题:

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

];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • PLEASE READ THE FOLLOWING APPLE DEVELOPER PROGRAM LICENSE...
    念念不忘的阅读 13,539评论 5 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 2,929评论 0 0
  • 中午回家,闺蜜打电话给我:“喂,咱们到底要不要出去玩啊?你想好了没有?”闺蜜Z已经不是第一次催我了,好久以前她就计...
    柒念的七年阅读 574评论 0 0
  • 如果把你的人生比作一盘录影带,那些与你过往的人都会参与其中,而你才是主角。同样,你也会参与到他人的录影带之中。 阅...
    知乎吴期待阅读 1,835评论 3 1