Elasticsearch-执行多字段最大聚合

问题描述

我有一个包含来自不同来源的事件的索引,因此,对于同一字段,我有两个不同的名称,分别是“ accounting_date ”和“ dt_comptable ”,需要查询获取两个字段的最大值, 以下查询对我来说只适用于一个字段:

GET indexXX/_search
{
  "size": 0,"aggs": {
    "latest_accounting_date": {
      "max": {
        "field": "dt_comptable"
      }
    }
  }
}  

我需要添加其他字段“ accounting_date ”。

解决方法

输入scripting ...代替指定字段,您可以指定一个脚本,该脚本将检索任意一个字段,无论哪个存在,但是max聚合将能够同时在两个字段上工作:

GET indexXX/_search
{
  "size": 0,"aggs": {
    "latest_accounting_date": {
      "max": {
        "script": {
          "source": "doc['dt_comptable'].size() > 0 ? doc['dt_comptable'].value : doc['accounting_date'].value"
        }
      }
    }
  }
}