我创建了如下映射:
PUT cars
{
"mappings":{
"_doc":{
"properties":{
"metadata":{
"type":"nested"
}
}
}
}
}
然后我插入一个文档:
PUT /cars/_doc/1
{
"metadata":[
{
"key":"price",
"value":20000
},
{
"key":"miles",
"value":1000
}
]
}
现在,我希望检索所有价格的总和(这里只有一个文档,但我仍然认为足以说明要点)。
我尝试过:
GET cars/_doc/_search
{
"aggs": {
"metadata": {
"nested": {
"path": "metadata"
},
"aggs": {
"prices": {
"sum": {
"field": "metadata.value"
}
}
}
}
}
}
但这将包括miles
,我不想要。
如何添加过滤器,以便查询中仅包含price
,即如何使查询返回20,000,而不是21,000?
答案 0 :(得分:0)
由于您只想考虑价格,因此您所要做的就是过滤key
为price
的嵌套文档。为此,您需要添加filter aggregation,如下所示:
{
"aggs": {
"metadata": {
"nested": {
"path": "metadata"
},
"aggs": {
"price": {
"filter": {
"term": {
"metadata.key": "price"
}
},
"aggs": {
"prices": {
"sum": {
"field": "metadata.value"
}
}
}
}
}
}
}
}