Elasticsearch聚合

目录

第1关:Elasticsearch聚合概述

代码

第2关:Elasitcsearch嵌套桶

代码

第3关:Elasticsearch聚合统计

代码

第4关:Elasticsearch指定范围聚合

代码

第5关:Elasticsearch过滤与聚合

代码

第6关:Elasticsearch多桶排序

代码

第7关:Elasticsearch去重

代码

第8关:Elasticsearch百分位计算

代码


第1关:Elasticsearch聚合概述

任务描述
本关任务:根据所学知识,掌握什么是 Elasticsearch 聚合,以及使用聚合计算每种品牌的红色汽车销量情况。

代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
    "properties": {
        "make": {
            "type": "text",
            "fielddata": true
        }
    }
}'
curl -H "Content-Type: application/json" -XGET 'http://127.0.0.1:9200/cars/transactions/_search?pretty' -d '{
    "size" : 0,
    "query": {
        "match": {
            "color": "red"
        }
    },
    "aggs" : {
        "popular_make" : {
            "terms" : {
              "field" : "make"
            }
        }
    }
}'
# ********** End ********** #

第2关:Elasitcsearch嵌套桶

任务描述
本关任务:计算每种价格下,每种品牌的销量情况。

相关知识
前面的关卡中我们查询了每个桶里面的文档数量。 但通常,我们的应用需要提供更复杂的文档度量。 例如,每种颜色汽车的平均价格是多少?

为了获取更多信息,我们需要告诉 Elasticsearch 使用哪个字段,计算何种度量。这需要将度量嵌套在桶内,度量会基于桶内的文档计算统计结果。

代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
    "properties": {
        "make": {
            "type": "text",
            "fielddata": true
        }
    }
}'
curl -H "Content-Type: application/json" -XGET 'http://127.0.0.1:9200/cars/transactions/_search?pretty' -d '{
    "size" : 0,
    "aggs": {
        "prices": {
            "terms": {
                "field": "price"
            },
            "aggs": {
                "makes": {
                    "terms": {
                        "field": "make"
                    }
                }
            }
        }
    }
}'
# ********** End ********** #

第3关:Elasticsearch聚合统计

任务描述
本关任务:我们构建聚合以便按季度展示所有汽车品牌总销售额。同时按季度、按每个汽车品牌计算销售总额,以便可以找出哪种品牌最赚钱。

相关知识
聚合还有一个令人激动的特性就是能够十分容易地将它们转换成图表和图形。

直方图 histogram 特别有用。 它本质上是一个条形图,如果有创建报表或分析仪表盘的经验,那么我们会毫无疑问的发现里面有一些图表是条形图。 创建直方图需要指定一个区间,如果我们要为售价创建一个直方图,可以将间隔设为 20,000。这样做将会在每个 $20,000 档创建一个新桶,然后文档会被分到对应的桶中。

对于仪表盘来说,我们希望知道每个售价区间内汽车的销量。我们还会想知道每个售价区间内汽车所带来的收入,可以通过对每个区间内已售汽车的售价求和得到。

代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
    "properties": {
        "make": {
            "type": "text",
            "fielddata": true
        }
    }
}'
curl -X GET "localhost:9200/cars/transactions/_search?pretty" -H 'Content-Type: application/json' -d'
{
   "size" : 0,
   "aggs": {
      "sales": {
         "date_histogram": {
            "field": "sold",
            "interval": "quarter", 
            "format": "yyyy-MM-dd",
            "min_doc_count" : 0,
            "extended_bounds" : {
                "min" : "2014-01-01",
                "max" : "2014-12-31"
            }
         },
         "aggs": {
            "per_make_sum": {
               "terms": {
                  "field": "make"
               },
               "aggs": {
                  "sum_price": {
                     "sum": { "field": "price" } 
                  }
               }
            },
            "total_sum": {
               "sum": { "field": "price" } 
            }
         }
      }
   }
}
'
# ********** End ********** #

第4关:Elasticsearch指定范围聚合

任务描述
本关任务:查询汽车品牌 honda 各个颜色的平均售价。

相关知识
通过之前的学习,你可能已经注意到,我们的搜索请求省略了一个 query。 整个请求只不过是一个聚合。

聚合可以与搜索请求同时执行,但是我们需要理解一个新概念: 范围 。 默认情况下,聚合与查询是对同一范围进行操作的,也就是说,聚合是基于我们查询匹配的文档集合进行计算的。

代码
#!/bin/bash
# 请在此处编写命令
# ********** Begin ********** #
curl -H 'content-Type:application/json' -XPUT 'http://localhost:9200/cars/_mapping/transactions?pretty' -d '{
    "properties": {
        "color": {
            "type": "text",
            "fielddata": true
        }
    }
}'
curl -X GET "localhost:9200/cars/transactions/_search?pretty" -H 'Content-Type: application/json' -d'
{
    "size": 0,
    "query" : {
        "match" : {
            "make" : "honda"
        }
    },
    "aggs" : {
        "colors" : {
            "terms" : {
       
### 使用Elasticsearch聚合功能 #### 设置环境并执行基本聚合查询 为了利用Elasticsearch的强大聚合能力,首先需要确保已安装配置好Elasticsearch集群,并通过RESTful API接口与其交互。对于简单的聚合操作,比如基于单个字段进行统计汇总,可以直接构建`terms`类型的聚合查询。 ```json GET /es_db/_search { "size": 0, "aggs": { "hs_remark_agg": { "terms": { "field": "remark.keyword" } } } } ``` 上述命令展示了如何创建一个仅返回聚合结果而不展示具体文档详情的请求[^4]。这里设置了`size: 0`来指示服务器忽略具体的匹配项而专注于聚合部分的结果集处理。 #### 多字段复合聚合实现 当涉及到多个维度的同时分析时,则可采用更复杂的结构——即所谓的“桶内嵌套”。这允许在一个更大的分类下进一步细分数据点。例如,在测试案例中验证了多字段组合的有效性[^1]: ```json POST /your_index_name/_search?size=0 { "query": {}, "aggs": { "composite_aggregation_example": { "composite": { "sources": [ {"source_field_1": {"terms": {"field": "field_one"}}}, {"source_field_2": {"terms": {"field": "field_two"}}} ] } } } } ``` 这段JSON定义了一个名为`composite_aggregation_example`的新聚合器实例,其中包含了两个源字段作为分组依据。这种设计非常适合于探索不同属性之间的系以及它们共同影响下的分布情况。 #### 应用场景举例说明 实际应用方面,Elasticsearch聚合特性广泛适用于各类数据分析需求。无论是追踪用户行为轨迹还是评估产品性能表现,亦或是研究人力资源状况等都能找到合适的解决方案[^2]。例如,可以通过聚合获取某段时间内的平均响应时间、最常访问页面路径或者是最高收入的商品类别等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柒_02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值