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条件里没有起效果。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐