对象的桶聚合而不是关键字

时间:2018-05-01 14:49:06

标签: elasticsearch elasticsearch-aggregation

我的索引中有文档,其中包含嵌套对象locations

"locations": [
    {
        "name": "California",
        "coordinates": {
            "lat": 36.78,
            "long": -119.42
        }
    }, ...
]

我编写了一个术语聚合来为数据集中出现的位置名称创建存储桶:

"aggs": {
    "global": {
        "nested": {
            "path": "locations"
        },
        "aggs":{
            "locations": {
                "terms": { 
                    "field": "locations.name.keyword"
                }
            }
        }
    }
}

我想要做的是为完整的位置对象创建存储桶,这样我就可以在代码中使用位置的名称和坐标。

是否存在类似于对象而不仅仅是关键字的术语聚合?

或者(因为相同位置的坐标始终相同)是否可以返回每个桶的第一个位置的坐标以及计数?

1 个答案:

答案 0 :(得分:1)

好的,开始很棒。现在,要获取每个存储桶的第一个位置的坐标以及计数,您可以通过添加top_hits子聚合来实现,如下所示:

"aggs": {
    "global": {
        "nested": {
            "path": "locations"
        },
        "aggs":{
            "locations": {
                "terms": { 
                    "field": "locations.name.keyword"
                },
                "aggs": {
                   "location": {
                      "top_hits": {
                         "size": 1,
                         "_source": ["locations.coordinates"]
                      }
                   }
                }
            }
        }
    }
}