ElasticSearch基本语法-聚合分析
2018-07-04 本文已影响41人
Haohao_95
聚合操作
1. 分组
GET /index/type/_search
{
"aggs": { //表示聚合分析操作
"group_by_tags": { //任意取的名字
"terms": { //选择aggs的种类,即分组
"field": "tags" //指定field
}
}
}
}
最终根据tags得出每组的数量
2. 搜索+聚合
GET /index/type/_search
{
"size" : 0,
"query": {
"match": {
"name" : "element"
}
},
"aggs": {
"group_by_tags": {
"terms": {
"field":"tags"
}
}
}
}
就是简单的先搜索后聚合
3.先分组,再算每组的平均值
GET /ecommerce/product/_search
{
"size": 0,
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags",
"size": 10
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
用一种聚合嵌套的方式来实现。首先以tags分组,分组之后在使用aggs来计算每个组的价格平均值。
4. 排序需求
按照tags分组,并显示每一组的平均价格。之后组的排序按照avg_price降序排列。
GET /commerce/producer/_search
{
"size": 0,
"aggs": {
"all_tags": {
"terms": {
"field" : "tags",
"order" : {"avg_price": "desc"}
},
"aggs" : {
"avg_price": {
"avg": {"field": "price"}
}
}
}
}
}
这种语法即在分组语句中加入order选项即可。
5.按照价格区间分组,每组内按照tags分组。最后计算每组的平均价格。
GET /ecommerce/product/_search
{
"aggs": {
"group_by_price":{
"range": {
"field": "price",
"ranges": [
{
"from": 0,
"to": 20
},
{
"from": 20,
"to": 40
},
{
"from": 40,
"to": 60
}
]
},
"aggs": {
"group_by_tags": {
"terms": {
"field": "tags",
"size": 10
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
}
}