📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

配置项作用 #

script.allowed_contexts 配置项控制允许执行脚本的上下文环境。脚本上下文定义了脚本可以运行的位置(如聚合、搜索、更新等)。

是否可选 #

默认值 #

[] (空列表,允许所有上下文)

配置项类型 #

动态配置 - 可以在运行时修改

配置格式 #

# 允许所有上下文(默认)
script.allowed_contexts: []

# 只允许特定上下文
script.allowed_contexts:
  - aggs
  - search

# 允许更多上下文
script.allowed_contexts:
  - aggs
  - search
  - update
  - score

# 禁用所有脚本
script.allowed_contexts:
  - none

可用上下文 #

上下文说明使用场景
aggs聚合脚本聚合计算
search搜索脚本查询评分
update更新脚本文档更新
score评分脚本自定义评分
filter过滤脚本结果过滤
ingest摄取脚本数据处理

推荐设置 #

环境推荐值说明
开发环境[]允许所有上下文
生产环境只允许需要的上下文最小权限原则
只读集群["aggs", "search", "score"]禁用写入操作
安全优先只允许必要上下文减少攻击面

使用示例 #

默认配置:

script.allowed_contexts: []

生产环境配置(推荐):

# 只允许只读操作
script.allowed_contexts:
  - aggs
  - search
  - score

完整功能环境:

script.allowed_contexts:
  - aggs
  - search
  - update
  - score
  - filter

最小权限原则 #

根据实际需求限制脚本上下文:

# 只需要聚合的脚本
script.allowed_contexts:
  - aggs

# 只需要搜索评分
script.allowed_contexts:
  - search
  - score

配置验证 #

# 查看当前配置
GET /_cluster/settings?filter_path=*.script.allowed_contexts

# 测试不同上下文的脚本
# 聚合上下文
GET /_search
{
  "aggs": {
    "test": {
      "script": {
        "source": "doc.field.value * 2"
      }
    }
  }
}

常见问题 #

问题 1:上下文不被允许

错误信息:

illegal_argument_exception: can't execute scripts in context [update]

解决方案:

# 添加允许的上下文
script.allowed_contexts:
  - update

问题 2:安全顾虑

解决方案:

# 只允许只读上下文
script.allowed_contexts:
  - aggs
  - search
  - score

注意事项 #

  1. 动态配置:可以在运行时修改
  2. 空列表:表示允许所有上下文
  3. none 值:禁用所有脚本执行
  4. 最小权限:生产环境应限制上下文
  5. 功能需求:根据实际功能需求设置

相关配置项 #

配置项默认值说明
script.allowed_types[]允许的脚本类型
script.disable_max_compilations_ratefalse是否禁用编译速率限制

完整配置示例 #

# easysearch.yml

# 生产环境配置
script.allowed_contexts:
  - aggs
  - search
  - score

script.allowed_types:
  - stored