ElasticSearch 搜索引擎入门到实战 17-- 聚合查询之桶聚合

ES聚合分析

  1. 聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎兼数据库,同样提供了强⼤的聚合分析能⼒。
  2. 对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
  3. ⽽关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上进⾏指标聚合。在ES中称为桶聚合

 

Terms Aggregation 根据字段项分组聚合

  • ⽕箭队根据年龄进⾏分组
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge别名": {
      "terms": {
        "field": "age",
        "size": 10
      }
    }
  },
  "size": 0
}

 

order 分组聚合排序

  • ⽕箭队根据年龄进⾏分组,分组信息通过年龄从⼤到⼩排序 (通过指定字段)
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge别名": {
      "terms": {
        "field": "age",
        "size": 10,
        "order": {
          "_key": "desc"
        }
      }
    }
  },
  "size": 0
}
  • ⽕箭队根据年龄进⾏分组,分组信息通过⽂档数从⼤到⼩排序 (通过⽂档数)
POST /nba/_search
{
  "query": {
    "term": {
      "teamNameEn": {
        "value": "Rockets"
      }
    }
  },
  "aggs": {
    "aggsAge别名": {
      "terms": {
        "field": "age",
        "size": 10,
        "order": {
          "_count": "desc"
        }
      }
    }
  },
  "size": 0
}
  • 每⽀球队按该队所有球员的平均年龄进⾏分组排序 (通过分组指标值)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName别名1": {
      "terms": {
        "field": "teamNameEn",
        "size": 30,
        "order": {
          "avgAge别名2": "desc"
        }
      },
      "aggs": {
        "avgAge别名2": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}

 

筛选分组聚合

  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (指定值列表)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName别名1": {
      "terms": {
        "field": "teamNameEn",
        "include": ["Lakers","Rockets","Warriors"],
        "exclude": ["Warriors"],
        "size": 30,
        "order": {
          "avgAge别名2": "desc"
        }
      },
      "aggs": {
        "avgAge别名2": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}
  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (正则表达式匹配值)
POST /nba/_search
{
  "aggs": {
    "aggsTeamName别名1": {
      "terms": {
        "field": "teamNameEn",
        "include": "Lakers|Ro.*|Warriors.*",
        "exclude": "Warriors",
        "size": 30,
        "order": {
          "avgAge别名2": "desc"
        }
      },
      "aggs": {
        "avgAge别名2": {
          "avg": {
            "field": "age"
          }
        }
      }
    }
  },
  "size": 0
}


 

Range Aggregation 范围分组聚合

  • NBA球员年龄按20,20-35,35这样分组
POST /nba/_search
{
  "aggs": {
    "ageRange别名": {
      "range": {
        "field": "age",
        "ranges": [
          {
            "to": 20,
            "key": "A"
          },
          {
            "from": 20,
            "to": 35,
            "key": "B"
          },
          {
            "from": 35,
            "key": "C"
          }
        ]
      }
    }
  },
  "size": 0
}

 
 

Date Range Aggregation 时间范围分组聚合

  • NBA球员按出⽣年⽉分组
POST /nba/_search
{
  "aggs": {
    "birthDayRange别名": {
      "date_range": {
        "field": "birthDay",
        "format": "MM-yyy",
        "ranges": [
          {
            "to": "01-1989"
          },
          {
            "from": "01-1989",
            "to": "01-1999"
          },
          {
            "from": "01-1999",
            "to": "01-2009"
          },
          {
            "from": "01-2009"
          }
        ]
      }
    }
  },
  "size": 0
}

 

Date Histogram Aggregation 时间柱状图聚合

  • 按天、⽉、年等进⾏聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day(1d), hour (1h), minute (1m), second (1s) 间隔聚合
  • NBA球员按出⽣年分组
POST /nba/_search
{
	"aggs": {
		"birthday_aggs别名": {
			"date_histogram": {
				"field": "birthDay",
				"format": "yyyy",
				"interval": "year"
			}
		}
	},
	"size": 0
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值