Неожиданные результаты при использовании минимальной субагрегации в Elasticsearch - PullRequest
0 голосов
/ 20 декабря 2018

Мои документы включают в себя поля name и date_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

...