ElasticSearch - поиск по диапазону дат, чтобы сравнить их - PullRequest
1 голос
/ 27 марта 2020

Я новичок в ElasticSearch (использую версию 7.6) и пытаюсь выяснить, как искать между двумя периодами времени. Один запрос, который я пробую, это запрос 12-й недели 2019 года и 12-й недели 2020 года. Идея состоит в том, чтобы сравнить результаты. Читая документацию и ища образцы, я приблизился к тому, что искал.

Самый простой способ - запустить два запроса с разными датами. Но я бы хотел ограничить количество запросов. Последний запрос, который я написал на основе чтения документов, использует агрегаты , но я не уверен, что это правильный путь:

GET sample-data_*/_search/
{
"query": {
  "bool": {
    "must": [
      {
        "range": {
          "@timestamp": {
            "gte": "2020-03-20 08:00:00",
            "lte": "2020-03-27 08:00:00"
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "range": {
      "date_range": {
        "field": "date",
        "format": "8yyyy-MM-dd",
        "ranges": [
          {
            "from": "2019-03-20",
            "to": "2019-03-27",
            "key": "last_years_week" 
          },
          {
            "from": "2020-03-20",
            "to": "2020-03-27",
            "key": "this_years_week"
          }
        ],
        "keyed": true
      }
    }
  }
}

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

{
    "_index" : "sample-data_2020_03_26",
    "_type" : "_doc",
    "_id" : "JyhcfWFFz0s1vwizjgxh",
    "_score" : 1.0,
    "_source" : {
        "@timestamp" : "2020-03-26 00:00:00",
        "name" : "TEST0001",
        "count" : "150",
        "total" : 3000
    }
}
...
"aggregations" : {
    "range" : {
      "buckets" : {
        "last_years_week" : {
          "from" : 1.55304E12,
          "from_as_string" : "2019-03-20",
          "to" : 1.5536448E12,
          "to_as_string" : "2019-03-27",
          "doc_count" : 0
        },
        "this_years_week" : {
          "from" : 1.5846624E12,
          "from_as_string" : "2020-03-20",
          "to" : 1.5852672E12,
          "to_as_string" : "2020-03-27",
          "doc_count" : 0
        }
      }
    }
  }

Мой вопрос: какой может быть эффективный способ запроса данных между двумя датами разных лет с использованием ElasticSearch, чтобы их можно было использовать для сравнения чисел?

Я был бы рад узнать больше о сложном для меня запросе ElasticSearch, если бы вы указали мне правильное направление.

Спасибо!

1 Ответ

1 голос
/ 02 апреля 2020

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

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

агрегация по диапазонам дат также будет полезна и основная разница между Эта агрегация и обычная агрегация диапазона состоят в том, что значения from и to могут быть выражены в выражении Date Math, которое полезно, если вы хотите, чтобы агрегаты были в вашем диапазоне дат, и он поддерживает формат данных math, как указано ниже:

...