Bool 查询的三个主要成分:must、should 和 must_not。
这个条件是必须满足的。比如,你想找一本关于 Python 编程的书,那么你会在 must 里写上关键词 “Python”。
这相当于你的偏好条件,可以有多个。比如,你希望这本书是最近出版的,或者是评分比较高的。这些条件用 should 来表示,ElasticSearch 会尽量满足它们,但如果不满足也没关系。
这是一些你不希望包含在结果中的条件。比如,你可能不喜欢读电子书,那么你可以在 must_not 里写上 “电子书” 这个条件。
{
"bool": {
"must": {
"match": { "title": "Python" }
},
"must_not": {
"match": { "format": "电子书" }
},
"should": [
{ "range": { "publish_year": { "gte": 2022 } } },
{ "range": { "rating": { "gte": 4 } } }
]
}
}
在这个查询中,我们使用了 must 条件确保标题包含 “Python”,must_not 条件排除了电子书,而 should 条件包含了发布年份在 2022 年之后和评分在 4 分以上的偏好条件。
在range语句中,包括大于(gt)、大于等于(gte)、小于(lt)和小于等于(lte)。