1. Elasticsearch查询入门:从零开始掌握搜索利器
第一次接触Elasticsearch的查询语法时,我完全被它的DSL(Domain Specific Language)搞懵了。这玩意儿看起来像JSON,但写起来又不像普通的编程语言。直到真正用它处理了几千万条日志数据后,我才明白为什么这套语法设计得如此特别——它完美平衡了灵活性和性能。
Elasticsearch的查询语法是开发者与这个分布式搜索引擎对话的核心方式。无论你是要搭建电商搜索、日志分析系统,还是实现内容推荐,掌握基础查询都是必经之路。下面我就结合自己踩过的坑,带你系统梳理ES查询的核心要点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 查询语法基础结构解析
2.1 查询请求的基本格式
一个典型的ES查询由HTTP请求体和URL参数组成。最基础的查询长这样:
json复制GET /my_index/_search
{
"query": {
"match_all": {}
},
"size": 10
}
这里有几个关键点:
GET /my_index/_search指定了要查询的索引和搜索端点query参数是查询的核心,里面包含具体的查询条件size控制返回结果数量(默认10条)
注意:实际使用时请用POST请求,虽然ES也支持GET,但GET请求带body在某些HTTP客户端会有问题
2.2 查询与过滤的区别
新手最容易混淆的就是query和filter的区别:
- query:计算相关性得分,用于全文搜索
- filter:二元判断(是/否),用于精确匹配,性能更高
json复制{
"query": {
"bool": {
"must": [
{ "match": { "title": "手机" } } // 查询
],
"filter": [
{ "term": { "status": 1 } } // 过滤
]
}
}
}
3. 核心查询类型详解
3.1 全文检索查询
3.1.1 match查询 - 最常用的全文搜索
json复制{
"query": {
"match": {
"content": "Elasticsearch入门"
}
}
}
这个查询会把"Elasticsearch入门"拆分成词项,默认使用OR逻辑搜索。如果想改为AND:
json复制{
"query": {
"match": {
"content": {
"query": "Elasticsearch入门",
"operator": "and"
}
}
}
}
3.1.2 match_phrase - 精确短语匹配
需要保持词项顺序时使用:
json复制{
"query": {
"match_phrase": {
"content": "Elasticsearch入门"
}
}
}
可以通过slop参数允许中间有其他词:
json复制{
"query": {
"match_phrase": {
"content": {
"query": "Elasticsearch 快速 入门",
"slop": 2
}
}
}
}
3.2 精确值查询
3.2.1 term查询 - 精确匹配
json复制{
"query": {
"term": {
"status": {
"value": 1
}
}
}
}
踩坑提醒:term查询对text类型字段无效,需要改用keyword类型或使用match
