Получить все результаты корзин date_histogram за все время

У меня есть приведенный ниже запрос для получения агрегатов с использованием Elasticsearch 7.1.

{ 
  "query": { 
    "bool": { 
      "filter": [ 
        { 
          "bool": { 
            "must": [ 
              { 
                "match": { 
                  "viewedInFeed": true
                } 
              }
            ] 
          } 
        } 
      ] 
    } 
  },
  "size": 0, 
  "aggs": { 
    "viewed_in_feed_by_day": { 
      "date_histogram": { 
        "field": "createdDate", 
        "interval" : "day",
        "format" : "yyyy-MM-dd",
        "min_doc_count": 1
      } 
    } 
  } 
}

Результаты превышают 10 000, и я не знаю, как работать, поскольку scroll недоступен для агрегирования. См. ответ ниже.

{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 10000,
            "relation": "gte"
        },
        "max_score": null,
        "hits": []
    },
    "aggregations": {
        "viewed_in_feed_by_day": {
            "buckets": [
                {
                    "key_as_string": "2020-03-19",
                    "key": 1584576000000,
                    "doc_count": 3028
                },
                {
                    "key_as_string": "2020-03-20",
                    "key": 1584662400000,
                    "doc_count": 5384
                },
                {
                    "key_as_string": "2020-03-21",
                    "key": 1584748800000,
                    "doc_count": 3521
                }
            ]
        }
    }
}

При использовании _count количество документов превышает 10 000, и даже без "min_doc_count": 1 результаты не возвращаются, я все равно знаю, что данных больше.


person George Taskos    schedule 21.03.2020    source источник
comment
date_histogram группирует данные по заданным интервалам. Сегмент из вашего результата {key_as_string: 2020-03-19, ключ: 1584576000000, doc_count: 3028}, если вы посмотрите на количество документов, вы увидите, что 3028 документов имеют дату 2020-03-19, поэтому возможно ли, что возвращенные документы имеют всего 3 свидания   -  person jaspreet chahal    schedule 22.03.2020
comment
ХОРОШО! Я не заметил, что количество документов на самом деле превышает 10 000. Как-то сбивает с толку. Итак, я действительно могу игнорировать значения «попаданий».   -  person George Taskos    schedule 22.03.2020
comment
В хитах отношение gte. Таким образом, хитов больше 10000. Чтобы получить фактическое количество, вы можете использовать агрегацию value_count. Я не понял путаницы, у вас есть из вашего комментария   -  person jaspreet chahal    schedule 22.03.2020


Ответы (1)


Основываясь на комментариях Джасприта, я предлагаю следующее:

  • Используйте track_total_hits=true, чтобы получить точное количество (поскольку 7.0), оставив size=0 только для агрегирования.
  • Используйте агрегацию stats, чтобы получить больше информации перед запуском гистограмм.
GET dates/_search
{ 
  "track_total_hits": true,               
  "size": 0, 
  "aggs": { 
    "dates_insights": {
      "stats": {
        "field": "createdDate"
      }
    },
    "viewed_in_feed_by_day": { 
      "date_histogram": { 
        "field": "createdDate", 
        "interval" : "month",
        "format" : "yyyy-MM-dd",
        "min_doc_count": 1
      } 
    } 
  } 
}

уступающий

...
"hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "viewed_in_feed_by_day" : {
      "buckets" : [
        {
          "key_as_string" : "2020-01-01",
          "key" : 1577836800000,
          "doc_count" : 1
        },
        {
          "key_as_string" : "2020-02-01",
          "key" : 1580515200000,
          "doc_count" : 1
        },
        {
          "key_as_string" : "2020-03-01",
          "key" : 1583020800000,
          "doc_count" : 1
        }
      ]
    },
    "dates_insights" : {
      "count" : 3,
      ...
      "min_as_string" : "2020-01-22T13:09:21.588Z",
      "max_as_string" : "2020-03-22T13:09:21.588Z",
      ...
    }
  }
...
person Joe Sorocin    schedule 22.03.2020
comment
Можно ли отличить «doc_count» в результатах ведер по конкретному полю документа? - person George Taskos; 23.03.2020
comment
Пожалуйста. Не уверен, что вы имеете в виду под количеством документов по спецификации. doc... Как должен выглядеть конечный ответ? - person Joe Sorocin; 23.03.2020
comment
На самом деле я нашел это, используя агрегат Cardinality в агрегате views_in_feed_by_day. - person George Taskos; 23.03.2020