此 API 用于获取 Easysearch 集群中支持的脚本语言信息。
API #
GET /_script_language
API 的作用 #
返回集群支持的脚本语言信息,包括:
- types_allowed:集群允许的脚本类型(如 inline、stored)
- language_contexts:每种脚本语言支持的使用上下文(如 score、update、aggs 等)
此 API 帮助开发者了解集群配置了哪些脚本语言,以及每种语言可以在哪些场景中使用。
API 的参数 #
此 API 没有路由参数和查询字符串参数。
请求示例 #
# 查询支持的脚本语言
GET /_script_language
响应示例 #
{
"types_allowed": [
"inline",
"stored"
],
"language_contexts": [
{
"language": "painless",
"contexts": [
"aggregation_selector",
"aggs",
"aggs_combine",
"aggs_init",
"aggs_map",
"aggs_reduce",
"boostrap",
"bucket_sort",
"canvas_expression",
"category_read",
"cluster_secret",
"composite",
"constant_score",
"copy",
"count_of",
"date_histogram_interval",
"delete",
"distance_feature",
"field",
"filter",
"freq_item_name",
"freq_item_script",
"function_score",
"hide",
"histogram",
"histogram_interval",
"histogram_sort",
"inference",
"inline",
"items_script",
"knn",
"matrix_stats",
"move",
"must",
"must_not",
"number_of_slices",
"operations",
"parent_join",
"partition",
"pref",
"prefix",
"rank_feature",
"rate_expressions",
"regex",
"rescore",
"runtime",
"runtime_field",
"score",
"search_lookup",
"seq_no",
"shard",
"should",
"sort",
"string_stats",
"template",
"template_chunk",
"terms_set",
"update",
"watcher_condition",
"watcher_transform",
"x_analytics_graph"
]
},
{
"language": "expression",
"contexts": [
"aggs",
"aggs_combine",
"aggs_init",
"aggs_map",
"aggs_reduce",
"bucket_sort",
"constant_score",
"distance_feature",
"field",
"function_score",
"histogram_sort",
"inline",
"number_of_slices",
"operations",
"parent_join",
"partition",
"pref",
"rank_feature",
"score",
"sort",
"template",
"update"
]
},
{
"language": "mustache",
"contexts": [
"template",
"template_chunk"
]
}
]
}
响应字段说明 #
| 字段 | 类型 | 描述 |
|---|---|---|
types_allowed | array | 集群允许的脚本类型 |
language_contexts | array | 每种脚本语言及其支持的使用上下文 |
language_contexts.language | string | 脚本语言名称 |
language_contexts.contexts | array | 该语言支持的使用上下文列表 |
脚本类型 (types_allowed) #
| 类型 | 描述 |
|---|---|
inline | 内联脚本,直接在请求体中编写脚本代码 |
stored | 存储脚本,预先存储在集群中的脚本 |
常见脚本语言 #
Painless #
Easysearch 的默认和推荐脚本语言,具有以下特点:
- 语法简洁,类似 Java
- 类型安全
- 性能优秀
- 安全性高,有限制的访问权限
- 支持最广泛的脚本上下文
Expression #
轻量级的表达式语言,用于简单计算:
- 语法简洁
- 性能极高
- 功能有限,只支持基本运算
- 适用于简单的数学和逻辑运算
Mustache #
模板语言,主要用于:
- 搜索模板
- 索引模板
- 不用于计算脚本
常见脚本上下文 (contexts) #
| 上下文 | 描述 |
|---|---|
score | 查询评分脚本 |
update | 文档更新脚本 |
filter | 过滤脚本 |
aggs / aggs_* | 聚合脚本 |
sort | 排序脚本 |
field / runtime_field | 字值脚本和运行时字段 |
function_score | 函数评分脚本 |
bucket_sort | 分桶排序脚本 |
template | 模板脚本 |
使用示例 #
查询支持的脚本语言 #
GET /_script_language
使用 Painless 内联脚本 #
POST /my-index/_update/1
{
"script": {
"lang": "painless",
"source": "ctx._source.counter += params.increment",
"params": {
"increment": 1
}
}
}
使用存储脚本 #
POST /my-index/_update/1
{
"script": {
"id": "my-stored-script",
"params": {
"increment": 1
}
}
}
使用 Expression 脚本 #
{
"script_fields": {
"test_field": {
"script": {
"lang": "expression",
"source": "doc['price'].value * params.tax",
"params": {
"tax": 1.2
}
}
}
}
}
脚本语言选择建议 #
Painless:
- 大多数脚本场景的首选
- 需要复杂逻辑时使用
- 需要访问文档字段时使用
Expression:
- 简单数学运算
- 对性能要求极高的场景
- 只需要基本运算符的场景
Mustache:
- 仅用于模板渲染
- 不用于计算脚本
注意事项 #
- 此 API 只支持 GET 方法
- 不需要任何参数
- 脚本语言支持取决于集群配置
- 某些脚本语言可能需要插件支持
- 不同的脚本上下文可能支持不同的语言
- 生产环境中建议使用存储脚本而非内联脚本
安全性考虑 #
- 内联脚本:在生产环境可能被禁用,建议使用存储脚本
- 沙箱限制:Painless 运行在受限的沙箱环境中
- 权限控制:某些脚本操作需要特定权限





