Неожиданные результаты при использовании минимальной субагрегации в Elasticsearch

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

0 ответов

Другие вопросы по тегам