1. ElasticSearch复合查询核心概念解析
复合查询(Compound Query)是ElasticSearch DSL中用于组合多个查询条件的特殊查询类型。与简单的term或match查询不同,复合查询允许我们通过逻辑关系将多个子查询组合成复杂的查询条件。在实际业务场景中,90%以上的搜索需求都需要使用复合查询来实现精确的结果筛选。
复合查询的核心价值在于:
- 支持AND/OR/NOT等布尔逻辑运算
- 实现查询条件的加权和优先级控制
- 组合全文检索与精确过滤条件
- 处理多字段联合查询的复杂场景
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 主要复合查询类型详解
2.1 bool查询:最常用的布尔组合
bool查询是ElasticSearch中最基础也最强大的复合查询类型。它通过四个子句来组合查询条件:
json复制{
"query": {
"bool": {
"must": [],
"should": [],
"must_not": [],
"filter": []
}
}
}
- must:所有条件必须匹配(AND逻辑)
- should:至少匹配一个条件(OR逻辑)
- must_not:必须不匹配的条件(NOT逻辑)
- filter:不参与评分的过滤条件
实战经验:filter子句的性能优于must,因为它不计算相关性分数且结果可缓存。对于不需要评分的过滤条件,优先使用filter。
2.2 boosting查询:条件权重控制
boosting查询允许我们降低某些条件的权重而非完全排除:
json复制{
"query": {
"boosting": {
"positive": {"match": {"title": "elasticsearch"}},
"negative": {"match": {"content": "入门教程"}},
"negative_boost": 0.5
}
}
}
- positive:基础查询条件
- negative:需要降权的条件
- negative_boost:降权系数(0-1之间)
