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

Bucket aggregation for an object instead of keyword

我的索引中有文档,其中有一个嵌套对象 locations

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

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

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

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

是否有类似术语聚合的东西可以作用于一个对象而不仅仅是一个关键字?

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

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

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