我有一些在Elasticsearch上建立索引的文档,看起来像这些样本:
{'country': 'France', 'collected': '2015-03-12', 'value': 20} {'country': 'Canada', 'collected': '2015-03-12', 'value': 21} {'country': 'Brazil', 'collected': '2015-03-12', 'value': 33} {'country': 'France', 'collected': '2015-02-01', 'value': 10} {'country': 'Canada', 'collected': '2015-02-01', 'value': 11} {'country': 'Mexico', 'collected': '2015-02-01', 'value': 9} ...
我想建立一个查询,每个国家/地区只能得到一个结果,而只能得到max(collected)。
max(collected)
因此,对于上面显示的示例,结果将类似于:
{'country': 'France', 'collected': '2015-03-12', 'value': 20} {'country': 'Canada', 'collected': '2015-03-12', 'value': 21} {'country': 'Brazil', 'collected': '2015-03-12', 'value': 33} {'country': 'Mexico', 'collected': '2015-02-01', 'value': 9}
我意识到我需要进行汇总country,但是我无法理解如何限制的结果max(collected)。
country
有任何想法吗?
您可以使用top_hits将country字段分组的聚合,每组返回1个文档,并按收集日期降序排列文档:
top_hits
POST /test/_search?search_type=count { "aggs": { "group": { "terms": { "field": "country" }, "aggs": { "group_docs": { "top_hits": { "size": 1, "sort": [ { "collected": { "order": "desc" } } ] } } } } } }