需求
查询考试成绩是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
}
}
}
注意:
must 和 should 的条件并列组合时,参数 minimum_should_match 默认值为0 (即 should 的条件可以都不满足)。这也是 must 和 should 组合查询时,should 失效的原因。文章来源:https://www.toymoban.com/news/detail-405723.html
should下有多个条件时,我们必须设置 minimum_should_match = 1 才能实现 或 操作。文章来源地址https://www.toymoban.com/news/detail-405723.html
到了这里,关于Elasticsearch 中 bool组合查询(must 和 should 组合)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!