elasticsearch按ID字段分组并在日期字段上执行最大值

我的索引具有如下所述的数据。

Id    version_number groupId   indexDate

1 v1 1 2016-11-15T12:00:00

2 v1 2 2016-11-20T12:00:00

3 v2 2 2016-12-01T12:00:00

4 v1 3 2016-13-01T12:00:00

5 v1 4 2016-11-01T12:00:00

6 v2 4 2016-13-01T12:00:00

7 v1 5 2016-14-01T12:00:00

如何在Java中编写Elasticsearch查询。如果我按日期搜索2016-13-01T12:00:00我希望看到每个groupId的最新版本,其indexDate小于或等于搜索日期?

预期输出:

Id    version_number   groupId   indexDate

1 v1 1 2016-13-01T12:00:00

2 v2 2 2016-11-20T12:00:00

6 v3 3 2016-10-01T12:00:00

7 v2 4 2016-10-01T12:00:00

我没有在Elasticsearch的日期字段中看到max函数来实现这一点。

回答:

我将首先进行汇总version_number,然后使用top_hits子汇总,以降序排序indexDate并返回该存储区的第一个文档的ID。

{

"size": 0,

"aggs": {

"by_version": {

"terms": {

"field": "version_number"

},

"aggs": {

"max_date": {

"top_hits": {

"size": 1,

"sort": {

"indexDate": "desc"

},

"_source": [

"id"

]

}

}

}

}

}

}

以上是 elasticsearch按ID字段分组并在日期字段上执行最大值 的全部内容, 来源链接: utcz.com/qa/417953.html

回到顶部