这是我在elasticsearch中编入索引的数据的一部分:
{
"country" : "India",
"colour" : "white",
"brand" : "sony"
"numberOfItems" : 3
}
我想根据每个国家/地区,每个颜色和每个品牌获得numberOfItems
的总和。有没有办法在elasticsearch中做到这一点?
答案 0 :(得分:2)
以下内容应该让您直接回答。 确保在使用脚本之前启用脚本。
{
"aggs": {
"keys": {
"terms": {
"script": "doc['country'].value + doc['color'].value + doc['brand'].value"
},
"aggs": {
"keySum": {
"sum": {
"field": "numberOfItems"
}
}
}
}
}
}
答案 1 :(得分:0)
要获得单个结果,您可以将sum aggregation应用于带有术语(术语)过滤器的过滤查询,例如:
{
"query": {
"filtered": {
"filter": {
"term": {
"country": "India"
}
}
}
},
"aggs": {
"total_sum": {
"sum": {
"field": "numberOfItems"
}
}
}
}
要通过数据一次性获取所有国家/颜色/品牌的统计信息,您可以使用以下查询和3个多桶聚合,每个聚合包含一个单桶总和sub-aggregation:
{
"query": {
"match_all": {}
},
"aggs": {
"countries": {
"terms": {
"field": "country"
},
"aggs": {
"country_sum": {
"sum": {
"field": "numberOfItems"
}
}
}
},
"colours": {
"terms": {
"field": "colour"
},
"aggs": {
"colour_sum": {
"sum": {
"field": "numberOfItems"
}
}
}
},
"brands": {
"terms": {
"field": "brand"
},
"aggs": {
"brand_sum": {
"sum": {
"field": "numberOfItems"
}
}
}
}
}
}