[英]Aggregations group by parameters in Elasticsearch
我在Elasticsearch中有一些类似的文档:
{ "numberOfBedrooms": 2, "price": 1500, "type": flat }
我想获取统计信息,例如按房间划分的平均价格是多少,按类型划分的平均价格是多少,以及诸如pernumberOfBedroom + type组合的平均价格是多少的组合。 如何在弹性搜索中使用聚合来实现这一目标?
谢谢!
要按房间数显示平均价格,请创建一个具有两个嵌套聚合级别的查询。
例如此查询:
curl -XGET 'http://localhost:9200/myindex/houses/_search?pretty&search_type=count' -d '{
"query" : {
"match_all" : { }
},
"aggs": {
"bed_agg": {
"terms": {"field": "numberOfBedrooms"},
"aggs" : {
"avg_price" : { "avg" : { "field" : "price" } }
}
}
}
}
}'
应该返回类似:
"aggregations" : {
"bed_agg" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [ {
"key" : 2,
"doc_count" : 2,
"avg_price" : {
"value" : 1750.0
}
}, {
"key" : 3,
"doc_count" : 1,
"avg_price" : {
"value" : 2100.0
}
} ]
}
要在另一个级别上进行聚合(例如添加建筑物类型),您可以创建一个新级别的聚合-例如,将“类型”聚合嵌套在“卧室”聚合中。
curl -XGET 'http://localhost:9200/myindex/houses/_search?pretty&search_type=count' -d '{
"query" : {
"match_all" : { }
},
"aggs": {
"bed_agg": {
"terms": {"field": "numberOfBedrooms"},
"aggs": {
"type_agg": {
"terms": {"field": "type"},
"aggs" : {
"avg_price" : { "avg" : { "field" : "price" } }
}
}
}
}
}
}
}'
或者,您可以使用脚本创建一个包含两个字段的单个存储桶:
"aggs": {
"bed_type_agg": {
"terms": { "script" : "doc[\"numberOfBedrooms\"].value+doc[\"type\"].value"},
"aggs" : {
"avg_price" : { "avg" : { "field" : "price" } }
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.