bool 查询
本章定位:bool 查询是 Query DSL 的组合工厂——将多个查询条件通过 must(与)、should(或)、filter(过滤)、must_not(非)组合起来。
定义与作用
bool 查询由四个子句组成:
must:文档必须匹配,参与评分filter:文档必须匹配,不评分但缓存should:文档至少匹配一个(可设 minimum_should_match),参与评分must_not:文档必须不匹配
解决痛点:单一查询(match/term)只能表达简单条件。现实搜索需要"名称包含A、分类等于B、价格在C范围、排除停售商品"——bool 查询就是这些条件的组合器。
完整示例:飞翔科技的多条件搜索
场景一:小崔的学员筛选
小崔帮杨英查找"广东省计算机专业、成绩 80+ 的活跃学生":
POST /students/_search
{
"query": {
"bool": {
"must": [
{ "match": { "major": "计算机科学" } }
],
"filter": [
{ "term": { "province": "广东" } },
{ "range": { "score": { "gte": 80 } } },
{ "term": { "status": "active" } }
],
"must_not": [
{ "term": { "status": "graduated" } }
]
}
}
}
场景二:should 提高召回率
POST /courses/_search
{
"query": {
"bool": {
"should": [
{ "match": { "title": "Python 数据分析" } },
{ "match": { "description": "NumPy Pandas" } }
],
"minimum_should_match": 1
}
}
}
小结
bool 查询四子句口诀:must 计算分但不缓存、filter 缓存但不计算分、should 加权提排名、must_not 排除。性能优化核心:将精确筛选从 must 移到 filter。