在Elasticsearch中使用最小子聚合时出现意外结果

时间:2018-12-20 15:04:49

标签: elasticsearch elasticsearch-aggregation elasticsearch-6

我的文档包括namedate_year字段,我的目标是找到最近添加的名称(例如,十个最后添加的名称以及它们出现的第一年和文档总数)。因此,我在name上有一个术语聚合,该术语按date_year上的最小子聚合排序:

{
  "aggs": {
    "group_by_name": {
      "terms": {
        "field": "name",
        "order": {
          "start_year": "desc"
        }
      },
      "aggs": {
        "start_year": {
          "min": {
            "field": "date_year"
          }
        }
      }
    }
  }
}

未在size下添加terms时,这将返回意外结果。例如,第一个存储桶具有doc_count 1和start_year 2015,而我确定有数十个具有此名称的文档,最早的date_year是1870。当我添加时size足够大,结果是准确的。例如:

{
  "aggs": {
    "group_by_name": {
      "terms": {
        "field": "name",
        "size": 10000,        <------ large enough value
        "order": {
          "start_year": "desc"
        }
      },
      "aggs": {
        "start_year": {
          "min": {
            "field": "date_year"
          }
        }
      }
    }
  }
}

谁能向我解释是什么原因造成的,以及如何限制返回的存储桶数量?我需要的在SQL中看起来像这样:

select name, min(year), count(*) from documents group by name order by min(year) desc limit 10

0 个答案:

没有答案