elasticsearch聚合分析

本文介绍如何使用Elasticsearch的聚合功能对商品数据进行多维度分析,包括计算不同标签下的商品数量、平均价格等,并展示了如何按价格区间分组及进一步分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前提

需要将文本field的fielddata属性设置为true:

PUT /ecommerce/_mapping/product
{
  "properties": {
    "tags": {
      "type": "text",
      "fielddata": true
    }
  }
}

其中:
“tags”:指需要设置fielddata的field的名称,需要哪个field,就写哪个field的名称

二、计算每个tag下的商品数量

GET /ecommerce/product/_search
{
  "aggs": {
    "my_group_by_tags": {
      "terms": { "field": "tags" }
    }
  }
}

其中:

  • “aggs”:表示进行聚合
  • “my_group_by_tags”:聚合的名称,可以任意取
  • “terms”:terms操作,按照指定document中的field分组,算出数量

三、对名称中包含yagao的商品,计算每个tag下的商品数量

GET /ecommerce/product/_search
{
  "size": 0,
  "query": {
    "match": {
      "name": "yagao"
    }
  },
  "aggs": {
    "all_tags": {
      "terms": {
        "field": "tags"
      }
    }
  }
}

其中:
“size”:显示几个分组源数据document

四、先分组,再算每组的平均值,计算每个tag下的商品的平均价格

GET /ecommerce/product/_search
{
    "size": 0,
    "aggs" : {
        "group_by_tags" : {
            "terms" : { "field" : "tags" },
            "aggs" : {
                "avg_price" : {
                    "avg" : { "field" : "price" }
                }
            }
        }
    }
}

其中:
“avg”:表示求平均值

五、计算每个tag下的商品的平均价格,并且按照平均价格降序排序

GET /ecommerce/product/_search
{
    "size": 0,
    "aggs" : {
        "all_tags" : {
            "terms" : { "field" : "tags", "order": { "avg_price": "desc" } },
            "aggs" : {
                "avg_price" : {
                    "avg" : { "field" : "price" }
                }
            }
        }
    }
}

其中,两个 “avg_price” 相对应

六、按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格

GET /ecommerce/product/_search
{
  "size": 0,
  "aggs": {
    "group_by_price": {
      "range": {
        "field": "price",
        "ranges": [
          {
            "from": 0,
            "to": 20
          },
          {
            "from": 20,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_tags": {
          "terms": {
            "field": "tags"
          },
          "aggs": {
            "average_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }
  }
}
### Elasticsearch 聚合分析教程 #### 使用桶聚合进行数据分组统计 Elasticsearch 提供了丰富的聚合功能来处理和分析存储的数据。其中,桶聚合是用于对数据集按照某些条件进行分割的一种方式[^1]。 对于想要统计不同品牌商品的数量这一需求来说,`terms` 是最常用的桶聚合类型之一: ```json GET /sales/_search { "size": 0, "aggs": { "brand_counts": { "terms": { "field": "brand" } } } } ``` 这段代码会返回各个品牌的销售记录数,并按品牌名称分类显示出来。 #### 应用日期直方图聚合查看时间序列变化 当涉及到基于时间维度的数据分布情况时,则可采用 `date_histogram` 来创建一段时间范围内的频率图表[^4]。 下面的例子展示了如何获取过去一年内每天的商品销量概况: ```json GET /sales/_search { "size": 0, "query": { "range": { "sale_date": { "gte": "now-1y", "lt": "now" } } }, "aggs": { "daily_sales": { "date_histogram": { "field": "sale_date", "calendar_interval": "day" } } } } ``` 此请求将根据每一天的时间戳字段 `sale_date` 对文档进行汇总计数,从而形成每日销售额的变化曲线。 #### 结合多个聚合函数深入挖掘信息价值 除了简单的分组外,还可以进一步应用其他类型的聚合操作(如求平均值、总和等),以获得更加全面的信息洞察力[^2]。 例如,在上面的基础上增加一个子聚合用来计算每个时间段内的平均价格: ```json GET /sales/_search { "size": 0, "query": { "range": { "sale_date": { "gte": "now-1y", "lt": "now" } } }, "aggs": { "daily_sales": { "date_histogram": { "field": "sale_date", "calendar_interval": "day" }, "aggs": { "average_price": { "avg": { "field": "price" } } } } } } ``` 这样就可以得到既有关于总量又有单件产品均价的趋势视图了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值