首页/数据/NoSQL 速查/脚本字段与 painless 脚本查询
本包目录(322 条)
MongoDB99 条
Elasticsearch89 条
ClickHouse56 条时序与列式28 条选型与架构50 条

脚本字段与 painless 脚本查询

script_fields 在返回结果时用 painless 计算派生字段(不写入索引),script query 则用脚本作为过滤条件;两者都依赖 doc values 或 _source。

NoSQL 速查数据更新于 2026-10-12
script_fields返回时计算,如 doc["price"].value * 1.1
script query{ "script": { "script": { "source": "doc["num"].value > 1" } } }
性能提醒脚本逐文档执行,无法走索引,过滤大结果集时开销明显

示例

示例
GET /my-index/_search
{
  "query": { "match_all": {} },
  "script_fields": {
    "price_with_tax": {
      "script": {
        "lang": "painless",
        "source": "doc["price"].value * 1.1"
      }
    }
  }
}
painless 默认对脚本编译结果做缓存,参数通过 params 传入才能命中缓存,把常量写死在 source 里会反复编译。

易错点

  • 对 text 字段用 doc 取值需要 fielddata,脚本里应换用 keyword 或数值字段
  • 脚本里直接访问缺失字段会抛异常,取值前用 doc.containsKey 判断更稳

数据来源与参考

  • Elasticsearch Guide: Script fields
  • Elasticsearch Guide: Script query
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌