全文目录:
- 开篇语
- 前言
- 摘要
- 概述
- ElasticSearch Query 查询方式详解
- 1. Match 查询(全文搜索)
- 1.1 Match 查询示例
- 1.2 Match 查询参数扩展
- 2. Term 查询(精准查询)
- 2.1 Term 查询示例
- 2.2 Terms 查询
- 3. Bool 查询(组合查询)
- 3.1 Bool 查询示例
- 4. Range 查询(范围查询)
- 4.1 Range 查询示例
- 4.2 日期范围查询
- 5. Aggregation 查询(聚合查询)
- 5.1 聚合查询示例
- 5.2 聚合扩展:嵌套聚合
- 6. SQL 查询(简化语法)
- SQL 查询示例
- 适用场景案例
- 优缺点分析
- 优点
- 缺点
- 小结
- 总结
- 文末
开篇语
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在上期内容中,我们深入探讨了 ElasticSearch 的基本架构和核心功能,包括分布式存储、分片与副本的工作机制以及倒排索引的实现原理。然而,在实际的开发场景中,仅仅理解这些基础知识是不够的。我们需要通过查询接口高效地从海量数据中获取我们需要的信息。
本期内容,我们将聚焦 ElasticSearch 的 Query 查询方式。ElasticSearch 提供了丰富的查询 DSL(Domain Specific Language),可以满足从简单的全文搜索到复杂条件查询的多样化需求。通过对查询方式的解析和实战案例分享,我们将全面掌握 ElasticSearch 的查询能力。
摘要
ElasticSearch 是一个分布式搜索和分析引擎,其强大的查询功能使其成为处理海量数据的利器。本篇文章将系统讲解 ElasticSearch 的查询方式,包括 全文搜索、结构化查询、组合查询、聚合查询 等,同时结合实际场景演示如何高效构建查询语句。最后,我们会对不同查询方式的优缺点进行对比,并总结最佳实践。
概述
ElasticSearch 提供两种主要的查询方式:
- 查询 DSL(Query DSL):基于 JSON 格式的查询语法,用于表达搜索条件。
- SQL 查询:ElasticSearch 提供了类似 SQL 的查询接口,适合习惯使用 SQL 的开发者。
在开发中,Query DSL 是主要的查询方式,它分为以下两大类:
- Match Queries(匹配查询):主要用于全文搜索。
- Term Queries(精准查询):用于精确匹配结构化数据。
除此之外,还可以通过组合查询和聚合查询实现复杂数据分析。
ElasticSearch Query 查询方式详解
1. Match 查询(全文搜索)
Match 查询是 ElasticSearch 中用于 全文搜索 的主要方式,它会对查询条件进行分词,然后匹配分词后的结果。
1.1 Match 查询示例
查询字段中包含某关键词的文档:
GET /my_index/_search
{"query": {"match": {"content": "elastic search"}}
}
- 解析:
- 查询字段
content
。 - 查询内容
elastic search
会被分词为elastic
和search
,然后进行匹配。
- 查询字段
1.2 Match 查询参数扩展
示例:控制匹配度(minimum_should_match)
GET /my_index/_search
{"query": {"match": {"content": {"query": "elastic search","minimum_should_match": "75%"}}}
}
- minimum_should_match:至少 75% 的词语需要匹配,适合宽松搜索。
2. Term 查询(精准查询)
Term 查询不会对输入内容进行分词,直接用于匹配精确的值(例如数字、日期、布尔值等)。
2.1 Term 查询示例
查询状态为 active
的文档:
GET /my_index/_search
{"query": {"term": {"status": "active"}}
}
- 解析:
- 查询字段
status
。 - 匹配字段值为
active
的文档。
- 查询字段
2.2 Terms 查询
匹配多个值:
GET /my_index/_search
{"query": {"terms": {"status": ["active", "pending"]}}
}
- 匹配
status
为active
或pending
的文档。
3. Bool 查询(组合查询)
Bool 查询是 ElasticSearch 的 核心查询,用于构建复杂的条件查询。它允许组合多个子查询,通过逻辑关系(must
、should
、must_not
)实现。
3.1 Bool 查询示例
同时满足多条件的查询:
GET /my_index/_search
{"query": {"bool": {"must": [{ "term": { "status": "active" }},{ "match": { "content": "elastic search" }}],"must_not": [{ "term": { "category": "deprecated" }}],"should": [{ "term": { "priority": "high" }}]}}
}
- must:必须满足的条件(类似 AND)。
- must_not:必须不满足的条件(类似 NOT)。
- should:可选条件(类似 OR,影响匹配评分)。
4. Range 查询(范围查询)
Range 查询用于匹配数值、日期等范围数据。
4.1 Range 查询示例
查询价格在 100 到 500 之间的商品:
GET /my_index/_search
{"query": {"range": {"price": {"gte": 100,"lte": 500}}}
}
- gte:大于等于(greater than or equal)。
- lte:小于等于(less than or equal)。
4.2 日期范围查询
查询过去 7 天的数据:
GET /my_index/_search
{"query": {"range": {"timestamp": {"gte": "now-7d/d","lt": "now/d"}}}
}
- now:当前时间。
- d:按天计算。
5. Aggregation 查询(聚合查询)
Aggregation(聚合查询)用于对数据进行统计分析,例如求平均值、总和、分组等。
5.1 聚合查询示例
按分类统计商品数量:
GET /my_index/_search
{"size": 0,"aggs": {"category_count": {"terms": {"field": "category.keyword"}}}
}
- size: 0:不返回文档,只返回聚合结果。
- terms:按分类字段分组。
5.2 聚合扩展:嵌套聚合
统计每个分类下的平均价格:
GET /my_index/_search
{"size": 0,"aggs": {"categories": {"terms": {"field": "category.keyword"},"aggs": {"avg_price": {"avg": {"field": "price"}}}}}
}
6. SQL 查询(简化语法)
ElasticSearch 提供了 SQL 查询接口,便于使用 SQL 风格查询数据。
SQL 查询示例
查询状态为 active 的文档:
POST /_sql?format=json
{"query": "SELECT * FROM my_index WHERE status = 'active'"
}
适用场景案例
-
电商平台:
- 使用 Match 查询实现商品的关键词搜索。
- 使用 Aggregation 查询统计每个分类下商品的数量。
-
日志分析系统:
- 使用 Range 查询分析过去一周的访问量。
- 使用 Bool 查询过滤多个条件的日志。
-
数据统计系统:
- 使用 Terms 和 Aggregation 查询统计各地销售额分布。
优缺点分析
优点
- 灵活性强:支持丰富的查询类型,适配不同需求。
- 性能高效:通过倒排索引和聚合优化实现快速查询。
- 扩展性好:支持组合查询和嵌套聚合。
缺点
- 学习曲线陡峭:查询 DSL 的复杂度较高。
- 调试难度大:复杂查询可能需要反复测试优化。
小结
通过本文的学习,我们系统了解了 ElasticSearch 的查询方式,包括全文搜索、精确匹配、范围查询、组合查询以及聚合查询等。无论是构建搜索引擎,还是设计复杂的数据统计功能,ElasticSearch 都提供了强大的工具链。
总结
ElasticSearch 的强大查询能力是其成为现代分布式搜索和分析引擎的核心优势。在实际项目中,通过合理选择和组合查询方式,可以高效地从海量数据中获取所需信息。希望本篇文章能为您在 ElasticSearch 查询开发中提供切实的帮助和启发!
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!