Отображение поля выполнения
Вы отображаете поля выполнения, добавив раздел runtime в определение отображения и определив скрипт Painless. Этот скрипт имеет доступ к целому контексту документа, включая исходное _source и любые отображенные поля и их значения. Во время запроса скрипт выполняется и генерирует значения для каждого скриптового поля, которое требуется для запроса.
Например, скрипт в следующем запросе вычисляет день недели из поля @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
}
}
© 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