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