1. Elasticsearch查询语法概述
Elasticsearch作为当前最流行的分布式搜索和分析引擎,其查询语法是每个开发者必须掌握的核心技能。我在实际项目中发现,很多团队虽然部署了ES集群,但查询性能始终上不去,90%的问题都源于对基础查询语法理解不透彻。
不同于传统SQL的二维表结构查询,ES的查询DSL(Domain Specific Language)是专门为文档型数据设计的JSON格式语法。它最大的特点是支持嵌套结构查询,能够精确控制搜索行为,同时提供丰富的聚合分析能力。举个例子,当我们需要在电商平台同时搜索商品名称、分类和价格区间时,一条精心设计的ES查询可以轻松实现毫秒级响应,而同样的需求用传统数据库可能需要复杂的多表关联。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础查询类型详解
2.1 匹配查询(Match Query)
这是最常用的全文搜索方式,会对查询文本进行分词处理。比如搜索"智能手机":
json复制{
"query": {
"match": {
"product_name": {
"query": "智能手机",
"operator": "and"
}
}
}
}
这里有几个关键点需要注意:
operator参数默认为or,设为and表示必须同时包含"智能"和"手机"- 可以通过
minimum_should_match控制匹配度,比如设为"75%"表示至少匹配75%的词项 - 对中文搜索建议配合ik分词器使用,否则默认的单字切分效果很差
我在电商项目实测中发现,合理设置minimum_should_match能使相关度排序准确率提升40%以上。
2.2 精确查询(Term Query)
当需要精确匹配某个字段值时使用,不会对查询文本分词:
json复制{
"query": {
"term": {
"product_id": {
"value": "P12345"
}
}
}
}
特别注意:
- 对text类型字段要用keyword子字段进行精确匹配
- 大量term查询建议改用terms查询,性能更好
- 对数值型字段如价格
