在 Elasticsearch 中,`Override field values at query time`是指通过运行时字段(runtime fields)在查询阶段动态覆盖索引字段的值,而无需修改原始索引数据。这种功能特别适用于以下场景:
1. 动态修改字段值:在某些情况下,你可能希望根据查询条件动态修改字段值,而不是直接修改索引中的数据。例如,根据用户是否登录来隐藏产品价格。
2. 避免重新索引数据:当需要对已索引的数据进行逻辑调整时,运行时字段可以避免重新索引整个数据集。
3. 优化存储和性能:运行时字段不会增加索引大小,因此可以节省存储空间并提高数据写入速度。
如何实现运行时字段覆盖
运行时字段通过在查询请求中定义`runtime_mappings`来实现。以下是一个示例,展示了如何在查询时动态修改字段值:
示例场景
假设你有一个`products`索引,其中包含`price`字段。你希望在查询时将所有价格覆盖为`222`。
索引结构
```json
PUT /products
{
"mappings": {
"properties": {
"price": {
"type": "scaled_float",
"scaling_factor": 100
}
}
}
}