【Elasticsearch】 10-DSL语法详解-复合查询bool(must、should、must_not、filter)
在Elasticsearch中,复合查询bool允许我们组合多个查询子句,并指定它们如何与布尔逻辑结合使用。它是Elasticsearch中最常用的查询之一。
以下是一个使用bool查询的例子:
GET /_search
{
"query": {
"bool": {
"must": [
{ "match": { "title": "War and Peace" }},
{ "match": { "author": "Leo Tolstoy" }}
],
"must_not": [
{ "match": { "type": "novella" }}
],
"should": [
{ "match": { "translator": "Louise Maude" }}
],
"filter": [
{ "range": { "publish_date": { "gte": "1800-01-01" }}}
]
}
}
}
在这个例子中,我们执行一个搜索,要求:
title
字段必须匹配 "War and Peace"author
字段必须匹配 "Leo Tolstoy"- 不能是
type
为 "novella" - 如果有
translator
字段,希望它匹配 "Louise Maude" - 并且,出版日期必须在1800年1月1日或之后
这些条件是使用布尔逻辑结合的,其中 "must" 子句是硬要求(AND),"should" 是可选的(OR),"must\_not" 是排除条件(NOT),而"filter" 子句则用于执行不评估相关性的过滤,适合于确定性的筛选,性能更优。
评论已关闭