Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Mapping ›Типы данных полей

Типы полей диапазона

Типы полей диапазона представляют собой непрерывный диапазон значений между верхней и нижней границами. Например, диапазон может представлять любую дату в октябре или любое целое число от 0 до 9. Они определяются с помощью операторов gt или gte для нижней границы и lt или lte для верхней границы. Они могут использоваться для запросов и имеют ограниченную поддержку агрегаций. Поддерживаются только агрегации гистограммы и cardinality.

Поддерживаются следующие типы диапазонов:

integer_range

Диапазон целых 32-битных чисел со знаком с минимальным значением -231 и максимальным 231-1.

float_range

Диапазон значений с плавающей запятой одинарной точности 32-битного IEEE 754.

long_range

Диапазон целых 64-битных чисел со знаком с минимальным значением -263 и максимальным 263-1.

double_range

Диапазон значений с плавающей запятой двойной точности 64-битного IEEE 754.

date_range

Диапазон значений date. Диапазоны дат поддерживают различные форматы дат через параметр отображения format. Независимо от используемого формата, значения дат анализируются в беззнаковое 64-битное целое число, представляющее миллисекунды с момента эпохи Unix в UTC. Значения, содержащие выражение now date math, не поддерживаются.

ip_range

Диапазон значений IP, поддерживающий адреса IPv4 или IPv6 (или смешанные).

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

PUT range_index
{
  "settings": {
    "number_of_shards": 2
  },
  "mappings": {
    "properties": {
      "expected_attendees": {
        "type": "integer_range"
      },
      "time_frame": {
        "type": "date_range", 
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
      }
    }
  }
}

PUT range_index/_doc/1?refresh
{
  "expected_attendees" : { 
    "gte" : 10,
    "lt" : 20
  },
  "time_frame" : {
    "gte" : "2015-10-31 12:00:00", 
    "lte" : "2015-11-01"
  }
}

Типы date_range принимают те же параметры поля, которые определены типом date.

Пример индексирования встречи с 10 до 20 участниками, не включая 20.

Пример диапазона дат с использованием отметки времени.

Ниже приведен пример запроса терминового запроса к полю integer_range с именем "expected_attendees". 12 - значение внутри диапазона, поэтому оно будет соответствовать.

GET range_index/_search
{
  "query" : {
    "term" : {
      "expected_attendees" : {
        "value": 12
      }
    }
  }
}

Результат, полученный с помощью вышеуказанного запроса.

{
  "took": 13,
  "timed_out": false,
  "_shards" : {
    "total": 2,
    "successful": 2,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
    "total" : {
        "value": 1,
        "relation": "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "range_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "expected_attendees" : {
            "gte" : 10, "lt" : 20
          },
          "time_frame" : {
            "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01"
          }
        }
      }
    ]
  }
}

Следующий пример - это запрос date_range по полю date_range с именем "time_frame".

GET range_index/_search
{
  "query" : {
    "range" : {
      "time_frame" : { 
        "gte" : "2015-10-31",
        "lte" : "2015-11-01",
        "relation" : "within" 
      }
    }
  }
}

Запросы по диапазонам работают так же, как описано в запросе по диапазону.

Запросы по диапазонам над полями диапазона поддерживают параметр relation, который может быть одним из WITHIN, CONTAINS, INTERSECTS (по умолчанию).

Этот запрос даст аналогичный результат:

{
  "took": 13,
  "timed_out": false,
  "_shards" : {
    "total": 2,
    "successful": 2,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
    "total" : {
        "value": 1,
        "relation": "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "range_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "expected_attendees" : {
            "gte" : 10, "lt" : 20
          },
          "time_frame" : {
            "gte" : "2015-10-31 12:00:00", "lte" : "2015-11-01"
          }
        }
      }
    ]
  }
}

Диапазон IP

В дополнение к формату диапазона выше, диапазоны IP могут быть предоставлены в нотации CIDR:

PUT range_index/_mapping
{
  "properties": {
    "ip_allowlist": {
      "type": "ip_range"
    }
  }
}

PUT range_index/_doc/2
{
  "ip_allowlist" : "192.168.0.0/16"
}

Параметры для полей диапазона

Принимаются следующие параметры для типов диапазонов:

coerce

Попытка преобразовать строки в числа и усечение дробей для целых чисел. Принимает true (по умолчанию) и false.

boost

Усиление запросов на уровне поля во время запроса. Принимает число с плавающей запятой, по умолчанию 1.0.

index

Должно ли поле быть доступным для поиска? Принимает true (по умолчанию) и false.

store

Необходимо ли хранить значение поля отдельно от поля _source? Принимает true или false (по умолчанию).

© 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/range.html

Spec-Zone.ru

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