如何通过Elasticsearch查询获取每个组的最新值?

我有一些在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)

因此,对于上面显示的示例,结果将类似于:

{'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)

有任何想法吗?

回答:

您可以使用top_hitscountry字段分组的聚合,每组返回1个文档,并按收集日期降序排列文档:

POST /test/_search?search_type=count

{

"aggs": {

"group": {

"terms": {

"field": "country"

},

"aggs": {

"group_docs": {

"top_hits": {

"size": 1,

"sort": [

{

"collected": {

"order": "desc"

}

}

]

}

}

}

}

}

}

以上是 如何通过Elasticsearch查询获取每个组的最新值? 的全部内容, 来源链接: utcz.com/qa/424700.html

回到顶部