Фильтровать результаты по текущему времени asticsearch-dsl.py

Я пытаюсь воссоздать этот запрос в asticsearch-dsl.py

{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        },
        {
          "query_string": {
            "analyze_wildcard": true,
            "query": "*"
          }
        },
        {
          "range": {
            "timeStamp": {
              "gte": 1524468274851,
              "lte": 1524469174851,
              "format": "epoch_millis"
            }
          }
        }
      ],
      "must_not": []
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  },
  "aggs": {
    "2": {
      "terms": {
        "field": "label",
        "size": 10,
        "order": {
          "1": "desc"
        }
      },
      "aggs": {
        "1": {
          "avg": {
            "field": "elapsed"
          }
        },
        "3": {
          "percentiles": {
            "field": "elapsed",
            "percents": [
              90
            ],
            "keyed": false
          }
        }
      }
    }
  },
  "version": true,
  "highlight": {
    "pre_tags": [
      "@kibana-highlighted-field@"
    ],
    "post_tags": [
      "@/kibana-highlighted-field@"
    ],
    "fields": {
      "*": {
        "highlight_query": {
          "bool": {
            "must": [
              {
                "match_all": {}
              },
              {
                "query_string": {
                  "analyze_wildcard": true,
                  "query": "*",
                  "all_fields": true
                }
              },
              {
                "range": {
                  "timeStamp": {
                    "gte": {NOW},
                    "lte": {1 hour ago},
                    "format": "epoch_millis"
                  }
                }
              }
            ],
            "must_not": []
          }
        }
      }
    },
    "fragment_size": 2147483647
  }
}

Я начинаю с малого и просто хочу получить среднее время отклика и 90-процентиль из моего набора данных. (В настоящее время небольшой набор данных 10 МБ ежедневно)

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
from elasticsearch_dsl.connections import connections

connections.create_connection(hosts=[REDACTED], timeout=20)
client = Elasticsearch()

s = Search(using=client, index="logstash-*") \
    .filter("term", label="1 year - Edge")

s.aggs.metric('avg_responsetime', 'avg', field='elapsed')
s.aggs.metric('90_percentile', 'percentiles', field='elapsed', percents=[90])

response = s.execute()

Метрические агрегации работают отдельно, но я не могу использовать их вместе. Нужно ли выполнять один поиск для каждой агрегации или я могу пойти другим путем?

0 ответов

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