Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Query DSL ›Запросы на уровне терминов

Запрос диапазона

Возвращает документы, содержащие термины в заданном диапазоне.

Пример запроса

Следующий запрос возвращает документы, где поле 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 math now. 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"                  
      }
    }
  }
}

Указывает, что значения date используют смещение UTC +01:00.

Со смещением UTC +01:00 Elasticsearch преобразует эту дату в 2019-12-31T23:00:00 UTC.

Параметр time_zone не влияет на значение now.

© 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

Spec-Zone.ru

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