ES查询语法总结 - 教程
一、全文检索查询
Match Query
搜索分词后的文本字段(如text类型):GET /products/_search { "query": { "match": { "description": "wireless headphones" } } }- 自动对
"wireless headphones"分词(如拆为wireless和headphones),匹配任一词汇的文档。
- 自动对
Multi-match Query
跨多个字段搜索:{ "query": { "multi_match": { "query": "apple", "fields": ["title", "brand", "description"] } } }
二、精确查询
Term Query
精确匹配未分词的keyword字段:{ "query": { "term": { "status": { "value": "published" // 精确匹配字段值 } } } }Terms Query
匹配字段中包含任一指定值的文档:{ "query": { "terms": { "tags": ["electronics", "sale"] // 匹配含 electronics 或 sale 的文档 } } }Range Query
数值或日期范围过滤:{ "query": { "range": { "price": { "gte": 100, "lte": 1000 } } } }Exists Query
筛选存在某字段的文档:{ "query": { "exists": { "field": "author" // 返回包含 author 字段的文档 } } }
三、复合查询
Bool Query 组合逻辑条件(AND/OR/NOT):
{ "query": { "bool": { "must": [ // 必须满足 { "match": { "title": "phone" } }, { "range": { "price": { "lte": 500 } } } ], "must_not": [ // 必须不满足 { "term": { "brand": "A" } } ], "should": [ // 满足任意一个 { "term": { "color": "black" } }, { "term": { "color": "silver" } } ], "minimum_should_match": 1, // 至少满足 1 个 should 条件 "filter": [ // 过滤,不参与评分 { "term": { "in_stock": true } } ] } } }
四、特殊查询
Match_all Query
匹配所有文档:{ "query": { "match_all": {} } }Wildcard Query
通配符匹配(*匹配任意字符,?匹配单个字符):{ "query": { "wildcard": { "sku": "pro-*" // 匹配 pro-123, pro-abc 等 } } }Prefix Query
前缀匹配:{ "query": { "prefix": { "city": "new" // 匹配 new york, new delhi 等 } } }Fuzzy Query
容错匹配(允许拼写错误):{ "query": { "fuzzy": { "text": { "value": "quick", "fuzziness": "AUTO" // 自动允许 1-2 个字符的差异 } } } }
五、其他功能示例
分页与排序
{ "query": { "match_all": {} }, "from": 10, // 跳过前 10 条 "size": 5, // 返回 5 条结果 "sort": [ { "price": { "order": "desc" } } // 按价格降序排序 ] }高亮匹配内容
{ "query": { "match": { "content": "Elasticsearch" } }, "highlight": { "fields": { "content": {} // 高亮 content 字段中的匹配词 } } }
六、关键注意事项
- 默认返回 10 条数据:在未显式设置 size 参数时,Elasticsearch 的 search 查询默认仅返回匹配结果的前 10 条记录。
- 字段类型:
term适用于keyword类型,match适用于text类型。 - 性能:优先用
filter替代must进行精确过滤(如状态、时间范围),减少评分计算。

浙公网安备 33010602011771号