需求
查询考试成绩是60分或90分的女生。
所以查询条件应该这么写 sex == '女' && ( score == 60 || score ==90 );
先看下bool的语法
{
"query": {
"bool": {
"must": [{},...], //相当于AND
"must_not": [{},...], //相当于NOT
"should": [{},...] //相当于OR
}
}
}
在ES中的实现
方式一:
在bool查询的must 中再嵌套一层bool来做should过滤。
GET stu/_search
{
"query": {
"bool": {
"must": [
{"term": {"sex": {"value": "女"}}},
{
"bool": {
"should": [
{"term": {"score": {"value": "60"}}},
{"term": {"score": {"value": "90"}}}
]
}
}
]
}
}
}
方式二:
使用 minimum_should_match 选项,至少匹配一项should子句。
GET stu/_search
{
"query": {
"bool": {
"must": [
{"term": {"sex": {"value": "女"}}}
],
"should": [
{"term": {"score": {"value": "60"}}},
{"term": {"score": {"value": "90"}}}
],
"minimum_should_match": 1
}
}
}扫描二维码关注公众号,回复: 15556305 查看本文章
注意:
must 和 should 的条件并列组合时,参数 minimum_should_match 默认值为0 (即 should 的条件可以都不满足)。这也是 must 和 should 组合查询时,should 失效的原因。
should下有多个条件时,我们必须设置 minimum_should_match = 1 才能实现 或 操作。