当前位置: 首页 > news >正文

全面盘点:Elasticsearch 支持的所有数据查询搜索方式

全面盘点:Elasticsearch 支持的所有数据查询搜索方式

    • 一、前言:ES 查询体系总览
      • ES 查询总分类流程图
    • 二、全文检索查询:处理文本分词搜索(最核心)
      • 定义:全文检索查询
      • 2.1 match 查询:标准全文检索
      • 2.2 match_phrase 查询:短语精确匹配
      • 2.3 multi_match 查询:多字段检索
      • 2.4 query_string 查询:语法表达式检索
    • 三、精准匹配查询:不分词,完全等值匹配
      • 定义:精准匹配查询
      • 3.1 term 查询:单值精准匹配
      • 3.2 terms 查询:多值精准匹配(IN 查询)
    • 四、组合条件查询:bool 复合查询(最强大)
      • 定义:组合条件查询
      • bool 核心关键字
      • 组合查询流程图
      • 实战示例
    • 五、范围查询:处理区间类数据
      • 定义:范围查询
      • 关键字
      • 示例:年龄 20~30 之间
    • 六、模糊与通配符查询:容错搜索
      • 6.1 wildcard 查询:通配符查询
      • 6.2 fuzzy 查询:容错模糊查询
    • 七、地理空间查询:LBS 位置服务
      • 定义:地理空间查询
      • 7.1 geo_distance:距离范围查询
      • 7.2 geo_bounding_box:矩形范围查询
    • 八、聚合查询:统计、分组、分析
      • 定义:聚合查询
      • 8.1 平均值聚合
      • 8.2 分组统计(Terms 聚合)
    • 九、高级查询:特殊业务场景
      • 9.1 exists 查询:字段是否存在
      • 9.2 ids 查询:根据文档ID批量查询
      • 9.3 nested 查询:嵌套对象查询
    • 十、查询上下文与过滤上下文:性能核心
      • 定义:查询上下文 vs 过滤上下文
      • 最佳实践流程图
    • 十一、ES 所有查询方式总结表
    • 十二、总结

🌺The Begin🌺点点关注,收藏不迷路🌺

一、前言:ES 查询体系总览

Elasticsearch 提供了极其丰富的查询语法体系,是它能支撑全文检索、精准筛选、地理查询、聚合分析等各类场景的核心。

所有查询最终都会封装成DSL(领域特定语言)语句,通过 RESTful API 执行。ES 查询主要分为顶层查询类型细分查询方式,覆盖从基础到高级的全场景需求。

ES 查询总分类流程图

ES查询方式

全文检索查询

精准匹配查询

组合条件查询

地理空间查询

范围/模糊/通配符查询

聚合查询

特殊查询

本文按照官方标准分类,从基础到高级,逐一讲解所有 ES 支持的查询方式,附带语法+使用场景,可直接复制使用。


二、全文检索查询:处理文本分词搜索(最核心)

定义:全文检索查询

text类型字段进行分词处理,根据分词结果匹配文档,按相关性分数排序,适用于文章、标题、描述、内容搜索。

2.1 match 查询:标准全文检索

  • 功能:对查询词分词,任意匹配一个分词即命中
  • 最常用:商品标题、内容搜索
{"query":{"match":{"title":"Elasticsearch 实战教程"}}}

2.2 match_phrase 查询:短语精确匹配

  • 功能:查询词不分词、顺序固定,完整匹配短语
  • 场景:精确短语搜索、代码片段检索
{"query":{"match_phrase":{"title":"Elasticsearch 实战"}}}

2.3 multi_match 查询:多字段检索

  • 功能:一个关键词在多个字段中同时搜索
  • 场景:同时搜索标题+简介+内容
{"query":{"multi_match":{"query":"搜索引擎","fields":["title","intro","content"]}}}

2.4 query_string 查询:语法表达式检索

  • 功能:支持 AND/OR/NOT 等语法,复杂文本搜索
{"query":{"query_string":{"default_field":"title","query":"Elasticsearch AND 教程 OR 实战"}}}

三、精准匹配查询:不分词,完全等值匹配

定义:精准匹配查询

不对查询词分词,完全等值匹配,适用于 keyword、数字、ID、状态、城市等字段。

3.1 term 查询:单值精准匹配

  • 场景:用户ID、状态值、城市、手机号
{"query":{"term":{"city":"北京"}}}

3.2 terms 查询:多值精准匹配(IN 查询)

  • 功能:匹配多个值中的一个
  • 场景:查询城市为北京 OR 上海 OR 广州
{"query":{"terms":{"city":["北京","上海","广州"]}}}

四、组合条件查询:bool 复合查询(最强大)

定义:组合条件查询

使用bool把多个查询条件组合,支持AND/OR/NOT/过滤逻辑,是企业开发中使用最多的查询方式。

bool 核心关键字

  1. must:必须满足(AND)
  2. should:满足一个即可(OR)
  3. must_not:必须不满足
  4. filter:过滤,不计算分数,性能更高

组合查询流程图

bool查询

must: 必须满足

should: 或条件

must_not: 排除

filter: 过滤条件

实战示例

{"query":{"bool":{"must":[{"term":{"city":"北京"}},{"match":{"intro":"开发"}}],"filter":[{"range":{"age":{"gt":25}}}]}}}

五、范围查询:处理区间类数据

定义:范围查询

用于查询数字、日期、IP等区间范围,支持大于、小于、大于等于、小于等于。

关键字

  • gt:大于
  • gte:大于等于
  • lt:小于
  • lte:小于等于

示例:年龄 20~30 之间

{"query":{"range":{"age":{"gte":20,"lte":30}}}}

六、模糊与通配符查询:容错搜索

6.1 wildcard 查询:通配符查询

  • *匹配任意字符
  • ?匹配单个字符
{"query":{"wildcard":{"title":"Elastic*"}}}

6.2 fuzzy 查询:容错模糊查询

  • 功能:支持错别字、拼写错误自动修正
  • 场景:搜索框智能纠错
{"query":{"fuzzy":{"title":{"value":"Elasticserch",// 故意写错"fuzziness":"AUTO"}}}}

七、地理空间查询:LBS 位置服务

定义:地理空间查询

支持经纬度查询,用于附近的人、附近门店、范围检索

7.1 geo_distance:距离范围查询

  • 场景:查找我附近 3km 内的门店
{"query":{"geo_distance":{"distance":"3km","location":{"lat":39.9,"lon":116.3}}}}

7.2 geo_bounding_box:矩形范围查询

查询落在矩形区域内的地理数据。


八、聚合查询:统计、分组、分析

定义:聚合查询

不只是搜索,还能统计、求和、平均值、分组、TopN,相当于 MySQL 的 group by + 聚合函数。

8.1 平均值聚合

{"size":0,"aggs":{"avg_age":{"avg":{"field":"age"}}}}

8.2 分组统计(Terms 聚合)

{"size":0,"aggs":{"city_group":{"terms":{"field":"city"}}}}

九、高级查询:特殊业务场景

9.1 exists 查询:字段是否存在

查询包含某个字段的文档

{"query":{"exists":{"field":"email"}}}

9.2 ids 查询:根据文档ID批量查询

{"query":{"ids":{"values":["1","2","3"]}}}

9.3 nested 查询:嵌套对象查询

用于数组、嵌套对象(nested 类型)精确查询。


十、查询上下文与过滤上下文:性能核心

定义:查询上下文 vs 过滤上下文

  1. 查询上下文(query)
    • 计算相关性分数
    • 排序
    • 性能较低
  2. 过滤上下文(filter)
    • 不计算分数
    • 自动缓存
    • 性能极高

最佳实践流程图

业务需求

需要排序打分

使用query

仅筛选条件

使用filter


十一、ES 所有查询方式总结表

查询类型关键字适用场景
全文检索match标题、内容分词搜索
短语匹配match_phrase完整短语精确匹配
多字段multi_match多字段同时检索
精准匹配term/terms城市、ID、状态
组合查询bool多条件复杂筛选
范围查询range年龄、价格、时间
模糊查询fuzzy错别字纠错
通配符wildcard模糊匹配
地理查询geo_distance附近门店、LBS
聚合查询aggs统计、分组、TopN
字段存在exists判断字段是否存在

十二、总结

  1. 全文查询:处理分词文本,是搜索核心
  2. 精准查询:处理等值匹配,适合 keyword 类型
  3. bool 查询:企业开发必备,组合所有条件
  4. 地理查询:LBS 场景专用
  5. 聚合查询:数据分析、统计、可视化必备
  6. 性能最优:能用 filter 不用 query,能 term 不用 fuzzy

Elasticsearch 的查询体系非常完善,基本可以覆盖所有搜索、筛选、分析业务场景,掌握本文所有查询方式,足以应对企业级开发需求。



🌺The End🌺点点关注,收藏不迷路🌺
http://www.jsqmd.com/news/671200/

相关文章:

  • 代码解释、调试与优化建议(使用千问)
  • 从模拟到实战:在eNSP中配置ACL限制特定网段访问(含时间范围策略)的保姆级教程
  • MASA全家桶汉化包终极指南:让Minecraft模组界面说中文
  • “Webinar Replay: Spring with Immutability” 指的是一场已录制回放的技术网络研讨会(Webinar)
  • Joy-Con Toolkit:让你的Switch手柄重获新生,告别漂移困扰
  • 实战精讲:如何在Elasticsearch中进行数据的聚合分析
  • 用智能指针实现的、线程安全的、可复用的 内存池
  • Windows电脑上直接运行安卓应用?APK安装器终极解决方案
  • 解密QQ音乐加密音频:qmc-decoder工具完全指南
  • EF Core 10向量搜索插件安装失败?92%开发者忽略的3个.NET SDK版本陷阱(.NET 8.0.400+强制要求,旧版将静默降级为L2距离)
  • 【Dify 2026文档解析权威白皮书】:首次公开3大底层解析引擎重构逻辑与实测性能跃升47%的工程细节
  • fre:ac音频转换器终极指南:免费、高效、跨平台的音频处理解决方案
  • Kotlin 协程 - 在Android中的使用
  • 浏览器Cookie本地导出终极指南:Get cookies.txt LOCALLY完全解析
  • 当缠论遇上自动化:我如何用开源插件让技术分析变得更直观
  • RunFilesBuilder 项目安装与配置指南
  • 题解:洛谷 AT_abc355_c [ABC355C] Bingo 2
  • Dify工作流引擎演进史(2024→2026核心跃迁图谱):从YAML硬编码到可视化DSL+动态条件路由的工程化革命
  • 多页pdf怎么拆分成单页?5种高效方法,新手不用求人
  • 手把手教你用STM32CubeMX和FreeModbus搭一个完整的Modbus RTU主从测试环境
  • 题解:AcWing 278 数字组合
  • 创新实训(二)——FastAPI后端登录注册功能实现及前后端连接
  • 3 shell脚本编程
  • C语言数组实战:避开‘暴力模拟’的坑,用标记法高效统计‘安全区域’
  • 5分钟掌握Inter字体:现代网页排版的终极OpenType特性指南
  • 齿轮箱零部件及其装配质检中的TVA技术突破(9)
  • XXMI Launcher终极指南:一站式游戏模组管理器快速上手
  • 题解:AcWing 6 多重背包问题III
  • 突破Vitest浏览器测试并行执行瓶颈:从阻塞到飞一般的体验
  • ITK-SNAP医学图像分割:3步掌握专业级医学影像分析