Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Отображение ›Типы данных полей

Числовые типы полей

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

long

Целое число со знаком длиной 64 бита, с минимальным значением -263 и максимальным значением 263-1.

integer

Целое число со знаком длиной 32 бита, с минимальным значением -231 и максимальным значением 231-1.

short

Целое число со знаком длиной 16 бит, с минимальным значением -32,768 и максимальным значением 32,767.

byte

Целое число со знаком длиной 8 бит, с минимальным значением -128 и максимальным значением 127.

double

Число с плавающей запятой двойной точности 64 бита IEEE 754, ограниченное конечными значениями.

float

Число с плавающей запятой одинарной точности 32 бита IEEE 754, ограниченное конечными значениями.

half_float

Число с плавающей запятой полуточной точности 16 бит IEEE 754, ограниченное конечными значениями.

scaled_float

Число с плавающей запятой, которое хранится как long, масштабируемое с помощью фиксированного double коэффициента масштабирования.

unsigned_long

Целое беззнаковое число длиной 64 бита, с минимальным значением 0 и максимальным значением 264-1.

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

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "number_of_bytes": {
        "type": "integer"
      },
      "time_in_seconds": {
        "type": "float"
      },
      "price": {
        "type": "scaled_float",
        "scaling_factor": 100
      }
    }
  }
}

Типы double, float и half_float предполагают, что -0.0 и +0.0 — это разные значения. Вследствие этого, запрос term на поле -0.0 не будет соответствовать значению +0.0 и наоборот. То же самое относится к запросам по диапазону: если верхняя граница — -0.0, то +0.0 не будет соответствовать, а если нижняя граница — +0.0, то -0.0 не будет соответствовать.

Какой тип следует использовать?

Что касается целых типов (byte, short, integer и long), вы должны выбрать наименьший тип, который достаточно для вашего случая использования. Это поможет индексированию и поиску стать более эффективными. Однако следует отметить, что хранение оптимизировано на основе фактических хранимых значений, поэтому выбор одного типа вместо другого не повлияет на требования к хранению.

Для чисел с плавающей запятой часто эффективнее хранить данные с плавающей запятой в целых числах, используя коэффициент масштабирования, что и делает тип scaled_float под капотом. Например, поле price может храниться в типе scaled_float с коэффициентом масштабирования scaling_factor равным 100. Все API будут работать так, как если бы поле хранилось как double, но под капотом Elasticsearch будет работать с количеством центов, price*100, что является целым числом. Это в основном помогает экономить дисковое пространство, так как целые числа намного легче сжимаются, чем числа с плавающей запятой. scaled_float также подходит для обмена точностью на дисковое пространство. Например, представьте, что вы отслеживаете использование ЦП как число между 0 и 1. Обычно не имеет большого значения, является ли использование ЦП 12.7% или 13%, поэтому можно использовать тип scaled_float с коэффициентом масштабирования scaling_factor равным 100, чтобы округлить использование ЦП до ближайшего процента для экономии места.

Если scaled_float не подходит, то вы должны выбрать наименьший тип, который достаточно для случая использования, среди типов с плавающей запятой: double, float и half_float. Ниже приведена таблица, сравнивающая эти типы для помощи в принятии решения.

Тип Минимальное значение Максимальное значение Значимые биты/цифры

double

2-1074

(2-2-52)·21023

53 / 15.95

float

2-149

(2-2-23)·2127

24 / 7.22

half_float

2-24

65504

11 / 3.31

Отображение числовых идентификаторов

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

Идентификаторы, такие как ISBN или идентификатор продукта, редко используются в запросах по диапазону. Однако они часто извлекаются с помощью запросов на уровне терминов.

Рассмотрите отображение числового идентификатора как keyword, если:

  • Вы не планируете искать данные идентификатора с помощью запросов по диапазону.
  • Важна скорость извлечения. Запросы по термину на поля типа keyword часто быстрее, чем запросы по диапазону на числовых полях.

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

Параметры для числовых полей

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

boost
Усиление запросов на уровне поля. Принимает число с плавающей точкой, по умолчанию равно 1.0.
coerce
Попытка преобразовать строки в числа и отбросить дробную часть для целых чисел. Принимает true (по умолчанию) и false. Не применимо к unsigned_long. Обратите внимание, что это нельзя установить, если используется параметр script.
doc_values
Должно ли поле храниться на диске в виде столбцов, чтобы его можно было использовать для сортировки, агрегаций или скриптов? Принимает true (по умолчанию) или false.
ignore_malformed
Если true, некорректные числа игнорируются. Если false (по умолчанию), некорректные числа вызывают исключение и отбрасывают весь документ. Обратите внимание, что это нельзя установить, если используется параметр script.
index
Должно ли поле быть доступным для поиска? Принимает true (по умолчанию) и false.
meta
Метаданные о поле.
null_value
Принимает числовое значение того же type типа, что и поле, которое используется вместо явных null значений. По умолчанию null, что означает, что поле считается отсутствующим. Обратите внимание, что это нельзя установить, если используется параметр script.
on_script_error
Определяет, что делать, если скрипт, определенный параметром script, генерирует ошибку во время индексирования. Принимает fail (по умолчанию), что приведет к отклонению всего документа, и continue, которое зарегистрирует поле в метаданных документа _ignored и продолжит индексирование. Этот параметр можно установить только если установлен параметр script.
script
Если этот параметр установлен, то поле будет индексировать значения, сгенерированные этим скриптом, а не читать значения напрямую из источника. Если для этого поля установлено значение в документе-вводе, документ будет отклонен с ошибкой. Скрипты имеют тот же формат, что и их эквиваленты для вычисления в реальном времени. Скрипты могут быть настроены только для long и double типов полей.
store
Следует ли хранить значение поля отдельно от поля _source? Принимает true или false (по умолчанию).
time_series_dimension

[preview] Эта функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих выпусках. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA. (Необязательно, логическое значение)

Для внутреннего использования только Elastic.

Помечает поле как временной ряд измерения. По умолчанию false.

Настройка индекса index.mapping.dimension_fields.limit ограничивает количество измерений в индексе.

Поля измерений имеют следующие ограничения:

  • Параметры сопоставления doc_values и index должны быть true.
  • Значения полей не могут быть массивом или иметь несколько значений.

Из числовых типов полей, только byte, short, integer, long и unsigned_long поддерживают этот параметр.

Числовое поле не может быть одновременно временным рядом измерения и временным рядом метрики.

time_series_metric

[preview] Эта функциональность находится в техническом предварительном просмотре и может быть изменена или удалена в будущих выпусках. Elastic будет работать над исправлением любых проблем, но функции в техническом предварительном просмотре не подпадают под SLA поддержки официальных функций GA. (Необязательно, строка)

Для внутреннего использования только Elastic.

Помечает поле как временную ряд метрики. Значение — тип метрики. По умолчанию null (не временная ряд метрики).

Для числовых полей этот параметр принимает значения gauge и counter. Вы не можете обновить этот параметр для существующих полей.

Для числовой временной метрики параметр doc_values должен быть true. Числовое поле не может быть одновременно временным рядом измерения и временным рядом метрики.

Параметры для scaled_float

scaled_float принимает дополнительный параметр:

scaling_factor

Коэффициент масштабирования для кодирования значений. Значения будут умножены на этот коэффициент во время индексирования и округлены до ближайшего значения типа long. Например, scaled_float с коэффициентом масштабирования scaling_factor, равным 10, будет храниться как 2.34, и все операции с поиском (запросы, агрегации, сортировка) будут работать так, как если бы в документе было значение 2.3. Высокие значения scaling_factor улучшают точность, но также увеличивают требования к памяти. Этот параметр обязателен.

scaled_float насыщение

scaled_float хранится как одно значение long, которое является произведением исходного значения и коэффициента масштабирования. Если умножение приводит к значению, выходящему за пределы диапазона long, значение насыщается до минимального или максимального значения long. Например, если коэффициент масштабирования равен 100, а значение равно 92233720368547758.08, ожидаемое значение равно 9223372036854775808. Однако хранимое значение равно 9223372036854775807, максимальному значению для long.

Это может привести к неожиданным результатам при использовании запросов по диапазонам range queries, когда коэффициент масштабирования или предоставленное значение float являются чрезвычайно большими.

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

Spec-Zone.ru

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