ElasticSearch入门系列教程---->(三)、group by + avg + sort等聚合分析

本文详细介绍如何在Elasticsearch中使用聚合查询进行数据分析,包括计算每个标签下的商品数量、按商品名称搜索并聚合,以及先分组再计算每个分组的平均值等操作。

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

将文本fields的Fielddata属性设置true

PUT http://{{es-host}}/ecommerce/_mapping/produce
{
	"properties":{
		"tags":{
			"type":"text",
			"fielddata":true
		}
	}
}

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

GET http://{{es-host}}/ecommerce/produce/_search
{
	"size":0,
	"aggs":{
		"group_by_tags":{
			"terms":{
				"field":"tags"
			}
		}
	}
}

group_by_tags 代表聚合分组名称,可以随意写,表述清楚含义即可;

field的值对应要聚合的字段

结果:

{
    "took": 43,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "group_by_tags": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "fangzhu",
                    "doc_count": 2
                },
                {
                    "key": "meibai",
                    "doc_count": 2
                },
                {
                    "key": "qingxin",
                    "doc_count": 1
                }
            ]
        }
    }
}

2、按商品名称搜索并聚合

GET http://{{es-host}}/ecommerce/produce/_search
{
	"query":{
		"match_phrase":{
			"name":"yagao"
		}
	},
	"aggs":{
		"group_by_tags":{
			"terms":{
				"field":"tags"
			}
		}
	},
	"size":0
}

检索结果:

{
    "took": 17,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "group_by_tags": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "fangzhu",
                    "doc_count": 2
                },
                {
                    "key": "meibai",
                    "doc_count": 2
                },
                {
                    "key": "qingxin",
                    "doc_count": 1
                }
            ]
        }
    }
}

3、先分组,再计算每个分组的平均值

GET http://{{es-host}}/ecommerce/produce/_search
{
	"size":0,
	"aggs":{
		"group_by_tags":{
			"terms":{
				"field":"tags"
			},
			"aggs":{
				"avg_price":{
					"avg":{
						"field":"price"
					}
				}
			}
		}
	}
}

结果:

{
    "took": 83,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 0,
        "hits": []
    },
    "aggregations": {
        "group_by_tags": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
                {
                    "key": "fangzhu",
                    "doc_count": 2,
                    "avg_price": {
                        "value": 27.5
                    }
                },
                {
                    "key": "meibai",
                    "doc_count": 2,
                    "avg_price": {
                        "value": 40
                    }
                },
                {
                    "key": "qingxin",
                    "doc_count": 1,
                    "avg_price": {
                        "value": 40
                    }
                }
            ]
        }
    }
}

 

 

 

 

转载于:https://my.oschina.net/shxjinchao/blog/3095291

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值