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