首页 > 解决方案 > 在嵌套字段上做直方图时,如何获取最后一个值?

问题描述

这与我之前的问题有关:

即使字段的映射在“文本”和“关键字”类型上,如何执行“总和”和“平均”聚合?

过程

我目前正在制定一个 Elasticsearch 查询,它将获取我所有基于范围EVERY DAY的文档,但我正在处理的字段是nested一个。所以想象一下,就像我每天根据我的范围计算文件总数一样

重现场景

日期范围:9 月 15 日 - 9 月 17 日

9 月 15 日:找到 1000 个文档
9 月 16 日:找到 500 个文档
9 月 17 日:找到 1500 个文档

这是我的示例查询:

'aggs' => [
    'ENGAGEMENT' => [
        'nested' => [
            'path' => "eng"
        ],
        'aggs' => [
            'ARTICLES' => [
                //Use Histogram because the pub_date is of
                //long data type
                //Use interval 86400 to represent 1 day
                'histogram' => [
                    'field'  => "eng.date_updated",
                    "interval" => "86400",
                ]
            ]
        ]
    ]
]

这是我拥有的示例 Elasticsearch 文档:

在此处输入图像描述

对于上面给定的场景和示例,当前查询显示此输出

在此处输入图像描述

我的主要目标
有了布局的想法,我怎样才能每天检索嵌套字段的最后一个对象?

例如:

对于 9 月 15 日,我想检索当天的LAST
soc_like_count 对于 9 月 16 日,我还想检索当天的LAST soc_like_count,依此类推...

尝试过的解决方案

试图用 做实验,inner_hits但看了一段时间后,inner_hitsbody在 ES 查询部分可用

有什么方法可以使用弹性搜索查询来执行此操作吗?

标签: elasticsearch

解决方案


使用Top_hits子聚合

  "aggs": {
    "date": {
      "date_histogram": {
        "field": "eng.date_updated",
        "interval": "month"
      },
      "aggs": {
        "top_hits": {    ---> added as sub aggregation to date_histogram
          "top_hits": {
            "sort": [
                        {
                        "date": {   ---> replace by field name you want to sort
                                    "order": "desc"
                              }
                      }
             ],
            "size": 1
          }
        }
      }
    }
  }

推荐阅读