Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Отображение ›Типы данных полей

Тип поля Гистограмма

Поле для хранения предварительно агрегированных числовых данных, представляющих гистограмму. Эти данные определяются с использованием двух пар массивов:

  • Массив values double чисел, представляющих корзины для гистограммы. Эти значения должны быть предоставлены в порядке возрастания.
  • Соответствующий массив counts long чисел, представляющих количество значений, попадающих в каждую корзину. Эти числа должны быть положительными или нулевыми.

Поскольку элементы в массиве values соответствуют элементам в том же положении массива count, эти два массива должны иметь одинаковую длину.

  • Поле histogram может хранить только одну пару массивов values и count на документ. Вложенные массивы не поддерживаются.
  • Поля histogram не поддерживают сортировку.

Применение

Поля histogram предназначены в первую очередь для использования с агрегациями. Для более удобного доступа к агрегациям данные поля histogram хранятся как двоичные значения документа и не индексируются. Его размер в байтах не превышает 13 * numValues, где numValues - длина предоставленных массивов.

Поскольку данные не индексируются, вы можете использовать поля histogram только для следующих агрегаций и запросов:

  • агрегация min
  • агрегация max
  • агрегация sum
  • агрегация value_count
  • агрегация avg
  • агрегация процентилей
  • агрегация рангов процентилей
  • агрегация боксплотов
  • агрегация гистограммы
  • агрегация диапазона
  • запрос существования

Создание гистограммы

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

  • Для режима T-Digest массив values представляет средние позиции центроидов, а массив counts представляет количество значений, приписываемых каждому центроиду. Если алгоритм уже начал приближать процентили, эта неточность переносится в гистограмму.
  • Для режима гистограммы с высоким динамическим диапазоном (HDR) массив values представляет фиксированные верхние пределы каждого интервала корзины, а массив counts представляет количество значений, приписываемых каждому интервалу. Эта реализация поддерживает фиксированную процентную ошибку в худшем случае (указанную как количество значащих цифр), поэтому значение, используемое при построении гистограммы, будет максимальной точностью, которую можно достичь во время агрегации.

Поле гистограммы «алгоритмически независимо» и не хранит данные, специфичные ни для T-Digest, ни для HDRHistogram. Хотя это означает, что поле теоретически можно агрегировать с помощью любого из алгоритмов, на практике пользователь должен выбрать один алгоритм и индексировать данные таким образом (например, центроиды для T-Digest или интервалы для HDRHistogram), чтобы обеспечить наилучшую точность.

Синтетическое _source

Синтетическое _source доступно в режиме General Availability только для индексов TSDB (индексов, для которых index.mode установлено в значение time_series). Для других индексов синтетическое _source находится на стадии технического предварительного просмотра. Функции, находящиеся на стадии технического предварительного просмотра, могут быть изменены или удалены в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции на стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.

Поля histogram поддерживают синтетическое _source в их стандартной конфигурации.

Для экономии места корзины с нулевым количеством значений не хранятся в значениях документа гистограммы. В результате, при индексировании поля гистограммы в индексе с включенным синтетическим источником, индексирование гистограммы, включающей корзины с нулевым количеством значений, приведет к отсутствию корзин при получении гистограммы.

Примеры

Следующий запрос API создания индекса создает новый индекс с двумя отображениями полей:

  • my_histogram, поле histogram, используемое для хранения данных процентилей
  • my_text, поле keyword, используемое для хранения заголовка гистограммы
resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "my_histogram": {
                "type": "histogram"
            },
            "my_text": {
                "type": "keyword"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        my_histogram: {
          type: 'histogram'
        },
        my_text: {
          type: 'keyword'
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  mappings: {
    properties: {
      my_histogram: {
        type: "histogram",
      },
      my_text: {
        type: "keyword",
      },
    },
  },
});
console.log(response);
PUT my-index-000001
{
  "mappings" : {
    "properties" : {
      "my_histogram" : {
        "type" : "histogram"
      },
      "my_text" : {
        "type" : "keyword"
      }
    }
  }
}

Следующие запросы API индексирования хранят предварительно агрегированные данные для двух гистограмм: histogram_1 и histogram_2.

resp = client.index(
    index="my-index-000001",
    id="1",
    document={
        "my_text": "histogram_1",
        "my_histogram": {
            "values": [
                0.1,
                0.2,
                0.3,
                0.4,
                0.5
            ],
            "counts": [
                3,
                7,
                23,
                12,
                6
            ]
        }
    },
)
print(resp)

resp1 = client.index(
    index="my-index-000001",
    id="2",
    document={
        "my_text": "histogram_2",
        "my_histogram": {
            "values": [
                0.1,
                0.25,
                0.35,
                0.4,
                0.45,
                0.5
            ],
            "counts": [
                8,
                17,
                8,
                7,
                6,
                2
            ]
        }
    },
)
print(resp1)
response = client.index(
  index: 'my-index-000001',
  id: 1,
  body: {
    my_text: 'histogram_1',
    my_histogram: {
      values: [
        0.1,
        0.2,
        0.3,
        0.4,
        0.5
      ],
      counts: [
        3,
        7,
        23,
        12,
        6
      ]
    }
  }
)
puts response

response = client.index(
  index: 'my-index-000001',
  id: 2,
  body: {
    my_text: 'histogram_2',
    my_histogram: {
      values: [
        0.1,
        0.25,
        0.35,
        0.4,
        0.45,
        0.5
      ],
      counts: [
        8,
        17,
        8,
        7,
        6,
        2
      ]
    }
  }
)
puts response
const response = await client.index({
  index: "my-index-000001",
  id: 1,
  document: {
    my_text: "histogram_1",
    my_histogram: {
      values: [0.1, 0.2, 0.3, 0.4, 0.5],
      counts: [3, 7, 23, 12, 6],
    },
  },
});
console.log(response);

const response1 = await client.index({
  index: "my-index-000001",
  id: 2,
  document: {
    my_text: "histogram_2",
    my_histogram: {
      values: [0.1, 0.25, 0.35, 0.4, 0.45, 0.5],
      counts: [8, 17, 8, 7, 6, 2],
    },
  },
});
console.log(response1);
PUT my-index-000001/_doc/1
{
  "my_text" : "histogram_1",
  "my_histogram" : {
      "values" : [0.1, 0.2, 0.3, 0.4, 0.5], 
      "counts" : [3, 7, 23, 12, 6] 
   }
}

PUT my-index-000001/_doc/2
{
  "my_text" : "histogram_2",
  "my_histogram" : {
      "values" : [0.1, 0.25, 0.35, 0.4, 0.45, 0.5], 
      "counts" : [8, 17, 8, 7, 6, 2] 
   }
}

Значения для каждой корзины. Значения в массиве обрабатываются как числа с плавающей точкой и должны быть указаны в порядке возрастания. Для гистограмм T-Digest это значение представляет среднее значение. В случае гистограмм HDR это значение представляет значение, к которому происходит итерация.

Количество для каждой корзины. Значения в массивах обрабатываются как целые числа типа long и должны быть положительными или нулевыми. Отрицательные значения будут отклонены. Связь между корзиной и количеством определяется положением в массиве.

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

Spec-Zone.ru

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