ES学习笔记八-聚合搜索

本文深入探讨了Elasticsearch中的聚合搜索,将其比喻为关系型数据库的group by操作。通过高阶概念,阐述如何在ES中对相同条件的数据进行分组和分析,为数据洞察提供有效工具。
摘要由CSDN通过智能技术生成

ES中的聚合搜索可以理解为关系型数据库中的group by,将具有相同条件的数据分组,并分析每一组数据的不同表现。

high-level concepts

要理解什么是聚合查询(统计) 需要了解下边的两个重要的概念。
Buckets
Collections of documents that meet a criterion 符合条件的一组数据
Metrics
Statistics calculated on the documents in a bucket 在这组数据中进行统计计算
GET /cars/transactions/_search?search_type=count
{
   
"aggs" : { 这是一个聚合查询
       
"colors" : { 此聚合查询的名字(自己定义)
           
"terms" : {
             
"field" : "color" 定义聚合条件。以color分组
           
}
       
}
   
}
}
You’ll notice that we used the  count   search_type .  Because we don’t care about search results—the aggregation totals—the  count  search_type will be faster because it omits the fetch phase.

在讲query 执行时,elasticsearch会分为两个阶段,query阶段,fetch阶段。我们并不需要查询结果,只需要知道统计结果,所以省去了fetch阶段,search_type=count使聚合查询更高效

{
   
...
   
"hits": {
     
"hits": [] 没有数据是因为我们search_type=count 并没有fetch阶段
   
},
   
"aggregations": {
     
"colors": { 你定义的聚合查询的名字
         
"buckets": [
           
{
               
"key": "red", 红色分组
               
"doc_count": 4 符合此条件的文档数
           
},
           
{
               
"key": "blue",
               
"doc_count": 2
           
},
           
{
               
"key": "green",
               
"doc_count": 2
           
}
         
]
     
}
   
}
}

adding a metric to the mix

GET /cars/transactions/_search?search_type=count
{
   
"aggs": {
     
"colors": {
         
"terms": {
           
"field": "color"
         
},
         
"aggs": { 最外层是aggs,用来包裹住我们的统计条件
           
"avg_price": { 统计名称
               
"avg": {
                 
"field": "price" 我们将计算每组的price平均值
               
}
           
}
         
}
     
}
   
}
}

buckets inside buckets

分组数据的嵌套,group by color,make 先按 color分组,再按make分组

GET /cars/transactions/_search?search_type=count
{
   
"aggs": {
     
"colors": {
         
"terms": {
           
"field": "color"
         
},
         
"aggs": {
           
"avg_price": { 注意它的顺序。他统计的平均值,是紧接的上一个条件的统计值
               
"avg": {
                 
"field": "price"
               
}
           
},
           
"make": {
               
"terms": {
                   
"field": "make"
               
}
           
}
         
}
     
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Elasticsearch中,聚合(aggregation)是一种强大的数据分析工具,可以对文档进行统计分析并返回计算结果。其中,Metric聚合是一种聚合类型,它会对文档中的某些数值型字段进行统计计算,例如:平均值、最大值、最小值、总和等。 下面我们来看一下如何在Elasticsearch中使用Metric聚合进行数据分析。 假设我们有一个存储了销售数据的索引,其中每个文档都包含了产品的名称、价格、销售量等信息。我们想要统计该索引中所有产品的平均价格、最高价格、最低价格以及销售总量,可以使用以下的聚合查询DSL: ``` GET /sales/_search { "size": 0, "aggs": { "avg_price": { "avg": { "field": "price" } }, "max_price": { "max": { "field": "price" } }, "min_price": { "min": { "field": "price" } }, "total_sales": { "sum": { "field": "sales" } } } } ``` 在上述查询中,我们使用了四个不同的Metric聚合:avg(平均值)、max(最大值)、min(最小值)和sum(总和)。每个聚合都针对文档中的price和sales字段进行了计算,最终返回了平均价格、最高价格、最低价格以及销售总量的计算结果。 在聚合查询中,我们还可以使用多个Metric聚合组合起来进行更加复杂的数据分析。例如,我们可以计算不同销售区域的平均价格和销售总量,可以使用以下的聚合查询DSL: ``` GET /sales/_search { "size": 0, "aggs": { "by_region": { "terms": { "field": "region" }, "aggs": { "avg_price": { "avg": { "field": "price" } }, "total_sales": { "sum": { "field": "sales" } } } } } } ``` 在上述查询中,我们首先使用了terms聚合将文档按照region字段进行了分组,然后在每个分组中使用了两个不同的Metric聚合:avg(平均值)和sum(总和)。最终返回了不同销售区域的平均价格和销售总量的计算结果。 总之,Metric聚合是Elasticsearch中非常有用的数据分析工具,可以帮助我们对文档中的数值型字段进行统计分析并返回计算结果。在实际应用中,我们可以根据具体的业务需求来选择不同的Metric聚合进行数据分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值