ES查询中有should的组合查询应注意minimum_should_match

ES查询中,构建查询条件有许多技巧,以下记录一个组合查询条件,

例如:查询颜色=红色,来源省份包括广西,广东 或 城市包括钦州市,中山市的荔枝品种,

mysql语句就是

SELECT * FROM `goods` WHERE `type` = 'red' AND (`province` IN ("广西","广东") OR `city` IN ("钦州市","中山市"))

看sql语句大家应该能更容易理解查询意思吧。。。

那在ES中的查询条件就是

GET goods/_search
{
  "from": 0, 
  "size": 1000,
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
          "type": "red"
          }
        }
      ],
      "should": [
        {
          "terms": {
            "province": [
              "广西",
              "广东"
            ]
          }
        },
        {
          "terms": {
            "city": [
              "钦州市",
              "中山市"
            ]
          }
        }
      ],
     "minimum_should_match":1
    }
  }
}

这里我用到一个minimum_should_match参数,这个参数的作用就是,当查询条件中有should的时候,查询结果中should里面的字段的最少匹配值。

拿上图搜索来说明:

当minimum_should_match=1时,则查询到的结果是type=red,province in(广西,广东)或type=red,city in(钦州市,中山市);

当minimum_should_match=2时,则查询到的结果是type=red,province in(广西,广东)同时也要city in(钦州市,中山市);

如果没有设置minimum_should_match或者minimum_should_match=0,则查询到的结果是type=red而已,should条件里没有起效果。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值