Elasticsearch 查询入门:像查字典一样简单

👋 你好,未来的 ES 查询高手!

你是否觉得 Elasticsearch (ES) 的查询语句复杂得像天书?别担心,这篇文章就是你的"傻瓜书"。我们将抛开具象的概念,直接上手最核心、最常用的查询方法,让你在几分钟内就能像查字典一样轻松地从 ES 中检索数据。

想象一下,ES 就是一个超级智能的图书馆管理员,而你的任务就是告诉他你要找什么样的书。你的"查询语句"就是你告诉他的指令。


🛠️ 我们的"菜谱":基本查询结构

所有 ES 查询都遵循一个基本的 JSON 结构。我们通常通过 REST API 的 _search 端点来发送查询请求。

bash 复制代码
# 使用 curl 命令的格式
GET /你的索引名称/_search
{
  "query": {
    "你的查询类型": {
      "你的字段": "你的值"
    }
  }
}

别怕,我们马上用例子来填充这个"菜谱"。


🔍 核心查询类型:你的"查询工具箱"

1. 匹配查询 (match) - 最常用的"全文搜索"

这是你最常用的工具,用于搜索文本内容。它会对查询字符串进行分词,然后去匹配字段。

场景: 在一个"文章"索引中,查找内容包含"elasticsearch"的文章。

json 复制代码
GET /articles/_search
{
  "query": {
    "match": {
      "content": "elasticsearch"
    }
  }
}
  • match: 查询类型。
  • content: 你要搜索的字段名。
  • "elasticsearch": 你要搜索的值。

小技巧 : 你可以搜索一个短语,用 match_phrase

json 复制代码
GET /articles/_search
{
  "query": {
    "match_phrase": {
      "content": "elasticsearch query"
    }
  }
}
2. 词条查询 (term) - 精确匹配的"利器"

term 查询用于精确匹配,它不会对你的查询词进行分词。非常适合匹配数字、日期、布尔值或者未经分词的关键词(如标签、状态码)。

场景 : 在一个"商品"索引中,查找状态(status)为"上架"的商品。

json 复制代码
GET /products/_search
{
  "query": {
    "term": {
      "status": "上架" 
    }
  }
}

重要区别

  • match"elastic search",可能会拆成 "elastic""search" 两个词去匹配。
  • term"elastic search",它会严格寻找字段值完全等于 "elastic search" 这个字符串的文档。
3. 布尔查询 (bool) - 组合你的"搜索条件"

这是最强大的工具之一,它允许你将多个查询条件组合起来,实现逻辑与(AND)、或(OR)、非(NOT)

它包含四个子句:

  • must必须匹配所有条件(AND)。贡献算分。
  • should应该匹配条件(OR)。贡献算分。
  • must_not必须不匹配条件(NOT)。不贡献算分。
  • filter必须 匹配条件(AND)。但不贡献算分,且会被缓存,性能更高。非常适合精确匹配。

场景: 查找"电子产品"类别中,价格低于1000元,且品牌不是"XX"的手机。

json 复制代码
GET /products/_search
{
  "query": {
    "bool": {
      "must": [ // AND:必须满足以下所有条件
        { "match": { "category": "电子产品" } },
        { "match": { "name": "手机" } }
      ],
      "filter": [ // AND:且必须满足以下条件(性能高)
        { "range": { "price": { "lt": 1000 } } } // range 查询用于范围:lt(小于), gt(大于), lte(小于等于)...
      ],
      "must_not": [ // NOT:必须不满足以下条件
        { "term": { "brand": "XX" } }
      ]
    }
  }
}

📊 结果排序与返回

查询结果默认按相关性得分(_score)排序。你可以用 sort 参数指定排序方式。

场景: 按价格从低到高排序,只返回前10条结果。

json 复制代码
GET /products/_search
{
  "query": {
    "match_all": {} // match_all: 匹配所有文档
  },
  "sort": [
    { "price": "asc" } // asc: 升序, desc: 降序
  ],
  "size": 10, // 返回前10条
  "from": 0    // 从第0条开始(分页)
}

💡 总结与下一步

恭喜你!你已经掌握了 ES 查询的"三板斧":

  1. match: 用于全文搜索。
  2. term: 用于精确匹配。
  3. bool: 用于组合复杂的查询逻辑。

你的入门实践路径

  1. 安装好 ES 和 Kibana(或使用 Elastic Cloud)。
  2. 在 Kibana 的 Dev Tools 中,照着上面的例子敲一遍。
  3. 尝试自己创建一些索引和文档,然后用不同的查询去检索它们。

ES 的查询世界非常广阔,还有 range, exists, wildcard, fuzzy 等众多查询类型等你探索。但掌握了今天这几个,你已经能解决 80% 的日常查询需求了!

相关推荐
min18112345614 分钟前
PC端零基础跨职能流程图制作教程
大数据·人工智能·信息可视化·架构·流程图
静听松涛13332 分钟前
中文PC端多人协作泳道图制作平台
大数据·论文阅读·人工智能·搜索引擎·架构·流程图·软件工程
黄焖鸡能干四碗1 小时前
智能制造工业大数据应用及探索方案(PPT文件)
大数据·运维·人工智能·制造·需求分析
世岩清上1 小时前
乡村振兴主题展厅本土化材料运用与地域文化施工表达
大数据·人工智能·乡村振兴·展厅
说私域2 小时前
短视频私域流量池的变现路径创新:基于AI智能名片链动2+1模式S2B2C商城小程序的实践研究
大数据·人工智能·小程序
MM_MS2 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
焦耳热科技前沿3 小时前
中科大EMA:3秒焦耳热一步合成双功能催化剂用于甲醇氧化协同高效制氢
大数据·人工智能·自动化·能源·材料工程
向量引擎小橙3 小时前
推理革命与能耗:AI大模型应用落地的“冰山成本”与破局之路
大数据·人工智能·深度学习·集成学习
一条咸鱼_SaltyFish3 小时前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
TMT星球4 小时前
星动纪元携人形机器人家族亮相CES 2026,海外业务占比达50%
大数据·人工智能·机器人