Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Отображение ›Поля выполнения

Отображение поля выполнения

Вы отображаете поля выполнения, добавив раздел runtime в определение отображения и определив скрипт Painless. Этот скрипт имеет доступ к целому контексту документа, включая исходное _source и любые отображенные поля и их значения. Во время запроса скрипт выполняется и генерирует значения для каждого скриптового поля, которое требуется для запроса.

Выдача значений поля выполнения

При определении скрипта Painless для использования с полями выполнения необходимо включить emit метод для выдачи рассчитанных значений.

Например, скрипт в следующем запросе вычисляет день недели из поля @timestamp, которое определено как тип date. Скрипт вычисляет день недели на основе значения timestamp и использует emit для возврата вычисленного значения.

PUT my-index-000001/
{
  "mappings": {
    "runtime": {
      "day_of_week": {
        "type": "keyword",
        "script": {
          "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"
        }
      }
    },
    "properties": {
      "@timestamp": {"type": "date"}
    }
  }
}

Раздел runtime может быть любым из этих типов данных:

  • boolean
  • composite
  • date
  • double
  • geo_point
  • ip
  • keyword
  • long

Поля выполнения с типом type date могут принимать параметр format точно так же, как и тип поля date.

Если включено отображение динамических полей, где параметр dynamic установлен в значение runtime, новые поля автоматически добавляются в отображение индекса как поля выполнения:

PUT my-index-000001
{
  "mappings": {
    "dynamic": "runtime",
    "properties": {
      "@timestamp": {
        "type": "date"
      }
    }
  }
}

Определение полей выполнения без скрипта

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

PUT my-index-000001/
{
  "mappings": {
    "runtime": {
      "day_of_week": {
        "type": "keyword"
      }
    }
  }
}

Когда скрипт не указан, Elasticsearch неявно ищет в _source поле с таким же именем, что и поле выполнения, и возвращает значение, если оно существует. Если поле с таким же именем не существует, в ответе не отображаются значения для этого поля выполнения.

В большинстве случаев, запрашивайте значения полей через doc_values, когда это возможно. Доступ к doc_values с помощью поля выполнения быстрее, чем получение значений из _source, из-за того, как данные загружаются из Lucene.

Однако есть случаи, когда получение полей из _source необходимо. Например, поля text по умолчанию не имеют doc_values, поэтому вам нужно получать значения из _source. В других случаях вы можете отключить doc_values для определенного поля.

Вы можете альтернативно добавить префикс к полю, для которого вы хотите получить значения, например params._source (например, params._source.day_of_week). Для простоты, рекомендуется определять поля выполнения в определении отображения без скрипта, когда это возможно.

Обновление и удаление полей выполнения

Вы можете обновлять или удалять поля выполнения в любое время. Чтобы заменить существующее поле выполнения, добавьте новое поле выполнения в отображение с тем же именем. Чтобы удалить поле выполнения из отображения, установите значение поля выполнения в null:

PUT my-index-000001/_mapping
{
 "runtime": {
   "day_of_week": null
 }
}

Последствия для последующих компонентов

Обновление или удаление поля выполнения во время выполнения зависимого запроса может привести к несогласованным результатам. Каждый фрагмент может иметь доступ к различным версиям скрипта в зависимости от времени вступления изменений отображения в силу.

Существующие запросы или визуализации в Kibana, которые полагаются на поля выполнения, могут завершиться неудачей, если вы удалите или обновите поле. Например, визуализация столбчатой диаграммы, использующая поле выполнения типа ip, завершится неудачей, если тип изменится на boolean или если поле выполнения будет удалено.

© 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/runtime-mapping-fields.html

Spec-Zone.ru

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