You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch 2.2 Groovy脚本聚合查询无法读取params参数原因求助

报错原因

该问题是Elasticsearch 2.2版本的Groovy脚本绑定规则与高版本不兼容导致的,核心原因有两点:

  1. ES 2.2 版本的Groovy脚本上下文中没有绑定顶层params变量,你在脚本中直接调用params['field1']属于访问不存在的变量,这也是报错No such property: params的直接诱因。
  2. 你当前使用的script对象嵌套inline、params的写法是ES 5.x及以后版本的规范,2.2版本不支持该结构的参数传递。

修复方案

无需额外安装插件,调整为2.2版本兼容的写法即可正常运行:
ES 2.x版本中,所有自定义参数会直接作为顶层变量注入脚本上下文,同时params字段需要和script字段平级放置,参考写法如下:

GET /_search
{
  "size" : 0,
  "query" : {
    "ids" : {
      "types" : [ ],
      "values" : [ "docId1", "docId2" ]
    }
  },
  "aggs": {
    "countries": {
      "terms": {
        "script": "def syn = field1; doc[syn].value",
        "params": {
          "field1": "country",
          "field2": "test",
          "field3": "test"
        }
      }
    }
  }
}

如果你的集群小版本不支持直接访问顶层参数,可以替换脚本为def syn = _params['field1']; doc[syn].value,用2.x版本专属的_params前缀访问传入参数。

可选配置

如果调整写法后仍有执行权限报错,可在elasticsearch.yml中添加以下配置,重启集群后生效:

script.groovy.sandbox.enabled: true
script.inline: on
script.indexed: on

内容的提问来源于stack exchange,提问作者nkhcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:45:08