Получать результаты за все время, дата и гистограмма - PullRequest
0 голосов
/ 22 марта 2020

У меня есть приведенный ниже запрос для получения агрегатов с использованием 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
      } 
    } 
  } 
}

Результаты превышают 10000, и я не уверен, как работать, поскольку 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 не возвращает результаты, я знаю, что в любом случае больше данных.

1 Ответ

1 голос
/ 22 марта 2020

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

  • Используйте 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",
      ...
    }
  }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...