Запрос диапазона
Возвращает документы, содержащие термины в заданном диапазоне.
Пример запроса
Следующий запрос возвращает документы, где поле age содержит термин между 10 и 20.
GET /_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2.0
}
}
}
} Параметры верхнего уровня для range
-
<field> -
(Обязательно, объект) Поле, которое вы хотите найти.
Параметры для <field>
-
gt - (Необязательно) Больше, чем.
-
gte - (Необязательно) Больше или равно.
-
lt - (Необязательно) Меньше, чем.
-
lte - (Необязательно) Меньше или равно.
-
format -
(Необязательно, строка) Формат даты, используемый для преобразования значений
dateв запросе.По умолчанию Elasticsearch использует предоставленный в схеме
<field>формат датыformat. Это значение переопределяет этот формат схемы.Для допустимого синтаксиса см.
format.Если формат или значение даты неполны, запрос диапазона заменяет любые отсутствующие компоненты значениями по умолчанию. См. Отсутствующие компоненты даты.
-
relation -
(Необязательно, строка) Указывает, как запрос диапазона сопоставляет значения для полей
range. Допустимые значения:-
INTERSECTS(По умолчанию) - Сопоставляет документы со значением поля диапазона, пересекающимся с диапазоном запроса.
-
CONTAINS - Сопоставляет документы со значением поля диапазона, полностью содержащим диапазон запроса.
-
WITHIN - Сопоставляет документы со значением поля диапазона, полностью находящимся внутри диапазона запроса.
-
-
time_zone -
(Необязательно, строка) смещение Coordinated Universal Time (UTC) или часовой пояс IANA, используемый для преобразования значений
dateв запросе в UTC.Допустимые значения — смещения UTC в формате ISO 8601, например,
+01:00или -08:00, и идентификаторы часовых поясов IANA, такие какAmerica/Los_Angeles.Пример запроса с параметром
time_zoneсм. в Часовой пояс в запросах диапазонаrange.Параметр
time_zoneне влияет на значение date mathnow.nowвсегда является текущим системным временем в UTC.Однако параметр
time_zoneпреобразует даты, вычисленные с использованиемnowи округления date math. Например, параметрtime_zoneпреобразует значениеnow/d. -
boost -
(Необязательно, число с плавающей точкой) Число с плавающей точкой, используемое для уменьшения или увеличения рейтингов релевантности запроса. По умолчанию равно
1.0.Вы можете использовать параметр
boostдля корректировки рейтингов релевантности для поисков, содержащих два или более запросов.Значения усиления относятся к значению по умолчанию
1.0. Значение усиления между0и1.0уменьшает рейтинг релевантности. Значение, большее чем1.0, увеличивает рейтинг релевантности.
Примечания
Использование запроса range с полями text и keyword
Запросы диапазона для полей типа text или keyword не будут выполнены, если search.allow_expensive_queries установлено в false.
Использование запроса range с полями date
Когда параметр <field> — тип данных поля date, вы можете использовать date math с параметрами:
-
gt -
gte -
lt -
lte
Например, следующий запрос возвращает документы, где поле timestamp содержит дату между сегодняшним и вчерашним днем.
GET /_search
{
"query": {
"range": {
"timestamp": {
"gte": "now-1d/d",
"lt": "now/d"
}
}
}
} Отсутствующие компоненты даты
Для запросов диапазона и агрегаций диапазона дат Elasticsearch заменяет отсутствующие компоненты даты следующими значениями. Отсутствующие компоненты года не заменяются.
MONTH_OF_YEAR: 01 DAY_OF_MONTH: 01 HOUR_OF_DAY: 23 MINUTE_OF_HOUR: 59 SECOND_OF_MINUTE: 59 NANO_OF_SECOND: 999_999_999
Например, если формат — yyyy-MM, Elasticsearch преобразует значение gt 2099-12 в 2099-12-01T23:59:59.999_999_999Z. Эта дата использует указанный год (2099) и месяц (12), но использует значение по умолчанию для дня (01), часа (23), минуты (59), секунды (59) и наносекунды (999_999_999).
Date math и округление
Elasticsearch округляет значения date math в параметрах следующим образом:
-
gt -
Округляет вверх до первой миллисекунды, не покрытой округлённой датой.
Например,
2014-11-18||/Mокругляется вверх до2014-12-01T00:00:00.000, исключая весь ноябрь. -
gte -
Округляет вниз до первой миллисекунды.
Например,
2014-11-18||/Mокругляется вниз до2014-11-01T00:00:00.000, включая весь месяц. -
lt -
Округляет вниз до последней миллисекунды перед округленным значением.
Например,
2014-11-18||/Mокругляется вниз до2014-10-31T23:59:59.999, исключая весь ноябрь. -
lte -
Округляет вверх до последней миллисекунды в интервале округления.
Например,
2014-11-18||/Mокругляется вверх до2014-11-30T23:59:59.999, включая весь месяц.
Пример запроса с использованием параметра time_zone
Вы можете использовать параметр time_zone для преобразования значений date в UTC, используя смещение UTC. Например:
GET /_search
{
"query": {
"range": {
"timestamp": {
"time_zone": "+01:00",
"gte": "2020-01-01T00:00:00",
"lte": "now"
}
}
}
} | Указывает, что значения | |
| Со смещением UTC | |
| Параметр |
© 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/query-dsl-range-query.html