在Elasticsearch中,运行时字段(Runtime fields)是一种在查询时定义的临时字段类型,它允许你在不需要将数据预先映射到索引中的情况下对数据执行复杂的转换或计算。
运行时字段的定义非常灵活,可以在查询时使用,并且不需要在索引映射中预定义。这使得你可以根据需要动态地添加字段,而不会影响索引的固有结构。
以下是一个简单的运行时字段的使用示例:
假设我们有一个名为logs
的索引,它包含一个message
字段,我们想要添加一个运行时字段upper_message
,它将把message
字段的值转换为大写。
POST /logs/_search
{
"runtime_mappings": {
"upper_message": {
"type": "keyword",
"script": "emit(doc['message'].value.toUpperCase())"
}
},
"query": {
"match": {
"upper_message": "ERROR"
}
}
}
在这个例子中,我们在查询时定义了一个名为upper_message
的运行时字段,它的类型是keyword
,并且使用了一个简单的Painless脚本来提取message
字段的值并将其转换为大写。然后,我们可以在查询中使用这个新的运行时字段来匹配包含"ERROR"的文档。
请注意,运行时字段不会更改索引的固有结构,只在查询执行时临时添加。此外,运行时字段的脚本可以包含复杂的逻辑,你可以使用它们来执行文本分析、数据转换或其他自定义计算。