Elasticsearch - 聚合查询(一)
普通字段聚合
# 使用数据
PUT /book/_doc/2
{
"name": "java编程思想",
"desc": "我们通常只需一天来审核你的信息。如果我们发现你的帐户确实未违反我们的社群守则,你便可以再为次使用Facebook官网。",
"price": 10.91,
"timestamp": "2024-01-02 1:55:12",
"pic": "021.png",
"tags": ["spring", "php"]
}
sql方式:
select price, count(*) as _count from book group by price
GET /book/_search
{
"query": {
"match_all": {}
},
"aggs": { # 聚合操作
"as_group_by": { # 查询结果的别名
"terms": { # 相当于group by
"field": "price"
}
}
}
}
- 查询出的聚合数据在aggregations下
- 查询出的数据包含index的原始数据 不是想要的只返回price,_count信息,可以通过size:0来解决
GET /book/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"price_group_by": {
"terms": {
"field": "price"
}
}
}
}
数组类型字段聚合
想要对tags字段进行聚合,像上边price一样写是不对的需要对tags字段设置Fielddata=true
PUT /book/_mapping
{
"properties": {
"tags": {
"type": "text",
"fielddata": true
}
}
}
GET /book/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"tags_group_by": {
"terms": {
"field": "tags"
}
}
}
}
查询后返回结果:
buckets:分组,类似group by
聚合tags 加上筛选条件
GET /book/_search
{
"query": {
"match": {
"name": "php"
}
},
"size": 0,
"aggs": {
"tags_group_by": {
"terms": {
"field": "tags"
}
}
}
}
按照tags分组 并查询每个tag下的平均价格
GET /book/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"group_by_tags": {
"terms": { # 先分组
"field": "tags"
},
"aggs": {
"price_avg": {
"avg": { # 后取平均值
"field": "price"
}
}
}
}
}
}
计算每个tag下的平均价格并倒序展示
group_by_tags里可以直接调用子聚合里边的字段
GET /book/_search
{
"query": {
"match_all": {}
},
"size": 0,
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags",
"order": {
"price_avg": "desc"
}
},
"aggs": {
"price_avg": {
"avg": {
"field": "price"
}
}
}
}
}
}
按照价格区间分组,之后再按照tag分组,再查询每个组的平均价格并倒序展示
拆分:
- 价格区间分组
- 按照tag分组
- 平均价格
- 倒序排序
GET /book/_search
{
"size": 0,
"aggs": {
"price_range": {
"range": { # 1. 价格区间分组
"field": "price",
"ranges": [
{
"from": 0,
"to": 7.8
},
{
"from": 7.8,
"to": 100
}
]
},
"aggs": {
"group_by_tags": {
"terms": { # 2. 按照tag分组
"field": "tags",
"order": { # 4. 倒序排序
"price_avg": "desc"
}
},
"aggs": {
"price_avg": {
"avg": { # 3. 平均价格
"field": "price"
}
}
}
}
}
}
}
}
分类:
Elasticsearch
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧