Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Агрегации ›Агрегации с группировкой

Агрегация по диапазону дат

Агрегация по диапазону, предназначенная для значений дат. Основное отличие этой агрегации от обычной агрегации range заключается в том, что значения from и to могут быть выражены в выражениях Date Math, а также можно указать формат даты, в котором будут возвращены поля ответа from и to. Обратите внимание, что эта агрегация включает значение from и исключает значение to для каждого диапазона.

Пример:

POST /sales/_search?size=0
{
  "aggs": {
    "range": {
      "date_range": {
        "field": "date",
        "format": "MM-yyyy",
        "ranges": [
          { "to": "now-10M/M" },  
          { "from": "now-10M/M" } 
        ]
      }
    }
  }
}

< сейчас минус 10 месяцев, округленное вниз до начала месяца.

>= сейчас минус 10 месяцев, округленное вниз до начала месяца.

В приведенном выше примере мы создали два диапазона групп, первый будет «группировать» все документы, датированные до 10 месяцев назад, а второй будет «группировать» все документы, датированные за последние 10 месяцев.

Ответ:

{
  ...
  "aggregations": {
    "range": {
      "buckets": [
        {
          "to": 1.4436576E12,
          "to_as_string": "10-2015",
          "doc_count": 7,
          "key": "*-10-2015"
        },
        {
          "from": 1.4436576E12,
          "from_as_string": "10-2015",
          "doc_count": 0,
          "key": "10-2015-*"
        }
      ]
    }
  }
}

Если формат или значение даты неполны, агрегация по диапазону дат заменяет любые отсутствующие компоненты значениями по умолчанию. См. Отсутствующие компоненты даты.

Пропущенные значения

Параметр missing определяет, как следует обрабатывать документы, в которых отсутствует значение. По умолчанию они будут игнорироваться, но их также можно обрабатывать так, как если бы у них было значение. Это делается путем добавления набора сопоставлений имя_поля: значение для указания значений по умолчанию для каждого поля.

POST /sales/_search?size=0
{
   "aggs": {
       "range": {
           "date_range": {
               "field": "date",
               "missing": "1976/11/30",
               "ranges": [
                  {
                    "key": "Older",
                    "to": "2016/02/01"
                  }, 
                  {
                    "key": "Newer",
                    "from": "2016/02/01",
                    "to" : "now/d"
                  }
              ]
          }
      }
   }
}

Документы без значения в поле date будут добавлены в группу «Older», как если бы они имели значение даты «1976-11-30».

Формат/шаблон даты

Эта информация скопирована из DateTimeFormatter

Все буквы ASCII зарезервированы как буквы шаблона формата, которые определяются следующим образом:

Символ Значение Представление Примеры

G

эра

текст

AD; Anno Domini; A

u

год

год

2004; 04

y

год эры

год

2004; 04

D

день года

число

189

M/L

месяц года

число/текст

7; 07; Jul; July; J

d

день месяца

число

10

Q/q

квартал года

число/текст

3; 03; Q3; 3rd quarter

Y

год по неделям

год

1996; 96

w

неделя года по неделям

число

27

W

неделя месяца

число

4

E

день недели

текст

Tue; Tuesday; T

e/c

локализованный день недели

число/текст

2; 02; Tue; Tuesday; T

F

неделя месяца

число

3

a

am-pm дня

текст

PM

h

час дня am-pm (1-12)

число

12

K

час дня am-pm (0-11)

число

0

k

час дня am-pm (1-24)

число

0

H

час дня (0-23)

число

0

m

минута часа

число

30

s

секунда минуты

число

55

S

доля секунды

дробь

978

A

миллисекунда дня

число

1234

n

наносекунда секунды

число

987654321

N

наносекунда дня

число

1234000000

V

идентификатор часового пояса

идентификатор зоны

America/Los_Angeles; Z; -08:30

z

название часового пояса

имя зоны

Pacific Standard Time; PST

O

локализованный смещение зоны

смещение-O

GMT+8; GMT+08:00; UTC-08:00;

X

смещение зоны Z для нуля

смещение-X

Z; -08; -0830; -08:30; -083015; -08:30:15;

x

смещение зоны

смещение-x

+0000; -08; -0830; -08:30; -083015; -08:30:15;

Z

смещение зоны

смещение-Z

+0000; -0800; -08:00;

p

дополнить следующее

модификатор заполнения

1

'

escape для текста

разделитель

''

одинарная кавычка

литерал

'

[

начало необязательного раздела

]

конец необязательного раздела

#

зарезервировано для будущего использования

{

зарезервировано для будущего использования

}

Количество букв шаблона определяет формат.

Текст
Стиль текста определяется на основе количества букв шаблона. Менее 4 букв шаблона будут использовать короткий формат. Ровно 4 буквы шаблона будут использовать полный формат. Ровно 5 букв шаблона будут использовать узкий формат. Буквы шаблона L, c и q задают автономную форму стилей текста.
Число
Если количество букв равно одному, значение выводится с минимальным количеством цифр без заполнения. В противном случае количество цифр используется в качестве ширины поля вывода, а значение дополняется нулями по необходимости. Следующие буквы шаблона имеют ограничения на количество букв. Можно указать только одну букву из c и F. До двух букв из d, H, h, K, k, m и s. До трёх букв из D.
Число/Текст
Если количество букв шаблона равно 3 или более, используйте правила для текста выше. В противном случае используйте правила для чисел выше.
Дробь
Выводит поле наносекунд как дробную часть секунды. Значение наносекунд имеет девять цифр, следовательно, количество букв шаблона составляет от 1 до 9. Если оно меньше 9, значение наносекунд усекается, и выводятся только наиболее значимые цифры.
Год
Количество букв определяет минимальную ширину поля, ниже которой используется заполнение. Если количество букв равно двум, используется сокращённая форма с двумя цифрами. Для печати выводятся две самые правые цифры. Для анализа будет использоваться базовое значение 2000, что приводит к году в диапазоне от 2000 до 2099 включительно. Если количество букв меньше четырёх (но не двух), знак выводится только для отрицательных годов в соответствии с SignStyle.NORMAL. В противном случае знак выводится, если ширина заполнения превышена, согласно SignStyle.EXCEEDS_PAD.
ZoneId
Выводит идентификатор часового пояса, например, Europe/Paris. Если количество букв равно двум, выводится идентификатор часового пояса. Любое другое количество букв приводит к IllegalArgumentException.
Имена часовых поясов
Выводит отображаемое имя идентификатора часового пояса. Если количество букв равно одному, двум или трём, выводится короткое имя. Если количество букв равно четырём, выводится полное имя. Пять или более букв приводит к IllegalArgumentException.
Смещение X и x
Этот формат смещения основан на количестве букв шаблона. Одна буква выводит только час, например, +01, если минута не равна нулю, выводится также минута, например, +0130. Две буквы выводят час и минуту без двоеточия, например, +0130. Три буквы выводят час и минуту с двоеточием, например, +01:30. Четыре буквы выводят час, минуту и необязательные секунды без двоеточия, например, +013015. Пять букв выводят час, минуту и необязательные секунды с двоеточием, например, +01:30:15. Шесть или более букв приводят к IllegalArgumentException. Буква шаблона X (заглавная) выведет Z, когда смещение, которое должно быть выведено, равно нулю, а буква шаблона x (строчная) выведет +00, +0000 или +00:00.
Смещение O
Этот формат локального смещения основан на количестве букв шаблона. Одна буква выводит короткий формат локального смещения, который представляет собой текст локального смещения, например, GMT, с часом без ведущего нуля, необязательными 2-значными минутами и секундами, если они не равны нулю, и двоеточием, например, GMT+8. Четыре буквы выводят полный формат, который представляет собой текст локального смещения, например, GMT, with 2-digit hour and minute field, optional second field if non-zero, and colon, for example `GMT+08:00. Любое другое количество букв приводит к IllegalArgumentException.
Смещение Z
Этот формат смещения основан на количестве букв шаблона. Одна, две или три буквы выводят час и минуту без двоеточия, например, +0130. Вывод будет +0000, когда смещение равно нулю. Четыре буквы выводят полный формат локального смещения, эквивалентный четырём буквам смещения O. Вывод будет соответствующим локальным текстом смещения, если смещение равно нулю. Пять букв выводят час, минуту, с необязательными секундами, если они не равны нулю, с двоеточием. Выводит Z, если смещение равно нулю. Шесть или более букв приводят к исключению IllegalArgumentException.
Необязательная секция
Маркеры необязательной секции работают точно так же, как вызов DateTimeFormatterBuilder.optionalStart() и DateTimeFormatterBuilder.optionalEnd().
Модификатор заполнения
Изменяет шаблон, который следует непосредственно за ним, на заполнение пробелами. Ширина заполнения определяется количеством букв шаблона. Это то же самое, что вызов DateTimeFormatterBuilder.padNext(int).

Например, ppH выводит час суток, заполненный пробелами слева до ширины 2.

Любая нераспознанная буква является ошибкой. Любой символ, не являющийся буквой, кроме [, ], {, }, # и одинарной кавычки, будет выведен напрямую. Несмотря на это, рекомендуется использовать одинарные кавычки вокруг всех символов, которые вы хотите вывести напрямую, чтобы гарантировать, что будущие изменения не повредят ваше приложение.

Часовой пояс в агрегациях диапазонов дат

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

Часовые пояса могут быть указаны либо как смещение UTC в формате ISO 8601 (например, +01:00 или -08:00), либо как один из идентификаторов часовых поясов из базы данных TZ.

Параметр time_zone также применяется к округлениям в выражениях даты и времени. Например, чтобы округлить до начала дня в часовом поясе CET, вы можете сделать следующее:

POST /sales/_search?size=0
{
   "aggs": {
       "range": {
           "date_range": {
               "field": "date",
               "time_zone": "CET",
               "ranges": [
                  { "to": "2016/02/01" }, 
                  { "from": "2016/02/01", "to" : "now/d" }, 
                  { "from": "now/d" }
              ]
          }
      }
   }
}

Эта дата будет преобразована в 2016-02-01T00:00:00.000+01:00.

now/d будет округлено до начала дня в часовом поясе CET.

Ключевой ответ

Установка флага keyed в значение true свяжет уникальный строковый ключ с каждой ячейкой и вернёт диапазоны в виде хеша, а не массива:

POST /sales/_search?size=0
{
  "aggs": {
    "range": {
      "date_range": {
        "field": "date",
        "format": "MM-yyy",
        "ranges": [
          { "to": "now-10M/M" },
          { "from": "now-10M/M" }
        ],
        "keyed": true
      }
    }
  }
}

Ответ:

{
  ...
  "aggregations": {
    "range": {
      "buckets": {
        "*-10-2015": {
          "to": 1.4436576E12,
          "to_as_string": "10-2015",
          "doc_count": 7
        },
        "10-2015-*": {
          "from": 1.4436576E12,
          "from_as_string": "10-2015",
          "doc_count": 0
        }
      }
    }
  }
}

Также возможно настроить ключ для каждого диапазона:

POST /sales/_search?size=0
{
  "aggs": {
    "range": {
      "date_range": {
        "field": "date",
        "format": "MM-yyy",
        "ranges": [
          { "from": "01-2015", "to": "03-2015", "key": "quarter_01" },
          { "from": "03-2015", "to": "06-2015", "key": "quarter_02" }
        ],
        "keyed": true
      }
    }
  }
}

Ответ:

{
  ...
  "aggregations": {
    "range": {
      "buckets": {
        "quarter_01": {
          "from": 1.4200704E12,
          "from_as_string": "01-2015",
          "to": 1.425168E12,
          "to_as_string": "03-2015",
          "doc_count": 5
        },
        "quarter_02": {
          "from": 1.425168E12,
          "from_as_string": "03-2015",
          "to": 1.4331168E12,
          "to_as_string": "06-2015",
          "doc_count": 2
        }
      }
    }
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/search-aggregations-bucket-daterange-aggregation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API