我的索引具有如下所述的数据。
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。
version_number
top_hits
indexDate
{ "size": 0, "aggs": { "by_version": { "terms": { "field": "version_number" }, "aggs": { "max_date": { "top_hits": { "size": 1, "sort": { "indexDate": "desc" }, "_source": [ "id" ] } } } } } }