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

张开发
2026/4/20 12:21:16 15 分钟阅读

分享文章

全面盘点: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 核心关键字must必须满足ANDshould满足一个即可ORmust_not必须不满足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 过滤上下文查询上下文query计算相关性分数排序性能较低过滤上下文filter不计算分数自动缓存性能极高最佳实践流程图业务需求需要排序打分使用query仅筛选条件使用filter十一、ES 所有查询方式总结表查询类型关键字适用场景全文检索match标题、内容分词搜索短语匹配match_phrase完整短语精确匹配多字段multi_match多字段同时检索精准匹配term/terms城市、ID、状态组合查询bool多条件复杂筛选范围查询range年龄、价格、时间模糊查询fuzzy错别字纠错通配符wildcard模糊匹配地理查询geo_distance附近门店、LBS聚合查询aggs统计、分组、TopN字段存在exists判断字段是否存在十二、总结全文查询处理分词文本是搜索核心精准查询处理等值匹配适合 keyword 类型bool 查询企业开发必备组合所有条件地理查询LBS 场景专用聚合查询数据分析、统计、可视化必备性能最优能用 filter 不用 query能 term 不用 fuzzyElasticsearch 的查询体系非常完善基本可以覆盖所有搜索、筛选、分析业务场景掌握本文所有查询方式足以应对企业级开发需求。The End点点关注收藏不迷路

更多文章