Elasticsearch Query DSL 入门需掌握五类核心查询:1. match_all 返回全部文档;2. match 用于 text 字段全文检索;3. term 实现 keyword 字段精确匹配;4. range 支持数值/日期范围筛选;5. bool 组合多条件逻辑。

如果您正在学习 Elasticsearch 查询语法,但对 Query DSL 的结构和常用查询类型感到困惑,则可能是由于未掌握其 JSON 格式组织方式与各类 query clause 的适用场景。以下是 Elasticsearch Query DSL 入门阶段最常使用的查询语法详解:
一、match_all 查询:匹配全部文档
该查询用于返回索引中所有文档,不施加任何过滤条件,常用于调试或获取数据总量。它不计算相关性得分,仅按默认排序返回前 10 条结果。
1、向 Elasticsearch 发送 GET 请求,路径为 /your_index_name/_search。
2、在请求体中传入 JSON 数据,格式为:{"query": {"match_all": {}}}。
3、如需返回更多结果,添加 "size": 100 字段以指定最大返回数量。
二、match 查询:全文检索基础操作
match 查询会对输入关键词进行分词处理,并在倒排索引中查找匹配的词条,适用于 text 类型字段的模糊匹配。
1、确认目标字段类型为 text(如 address、description),而非 keyword。
2、构造请求体,例如搜索包含 “java” 和 “developer” 的文档:{"query": {"match": {"description": "java developer"}}。
3、可配合 "operator": "and" 强制所有分词项必须同时存在。
三、term 查询:精确匹配 keyword 字段
term 查询不对关键词分词,直接比对倒排索引中的原始词条,适用于 keyword、number、date 等结构化字段的严格相等判断。
1、确保待查字段映射类型为 keyword(如 name.keyword 或 status)。
2、发送请求体:{"query": {"term": {"status": {"value": "active"}}}}。
3、注意大小写敏感,且不能对 text 字段直接使用 term 查询,否则可能无结果。
四、range 查询:数值或日期范围筛选
range 查询用于对数字、日期或字符串类型的字段执行区间判断,支持大于、小于、等于及其组合逻辑。
1、确认字段已正确定义为 integer、date 或 keyword 类型。
2、使用 "gte"(大于等于)、"lte"(小于等于)、"gt"(大于)、"lt"(小于)参数构建条件。
3、示例请求体:{"query": {"range": {"age": {"gte": 18, "lte": 65}}}}。
五、bool 查询:组合多个条件逻辑
bool 查询通过 must、should、must_not、filter 四类子句组合多个查询语句,实现类似 SQL 中 AND/OR/NOT 的复合逻辑控制。
1、使用 "must" 表示所有子句必须满足,影响相关性评分。
2、使用 "filter" 表示条件必须满足但不参与评分计算,性能更优。
3、构造嵌套结构,例如查找 age 在 25–35 之间且 status 为 active 的文档:{"query": {"bool": {"must": [{"match": {"status": "active"}}], "filter": [{"range": {"age": {"gte": 25, "lte": 35}}}]} }}。

















