--- title: "查询脚本语言" date: 2026-02-09 lastmod: 2026-02-09 description: "介绍如何在 Easysearch 中查询支持的脚本语言及其使用上下文。" tags: ["脚本", "开发", "API"] summary: "此 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." --- 此 API 用于获取 Easysearch 集群中支持的脚本语言信息。 ## API ``` GET /_script_language ``` ## API 的作用 返回集群支持的脚本语言信息,包括: - **types_allowed**:集群允许的脚本类型(如 inline、stored) - **language_contexts**:每种脚本语言支持的使用上下文(如 score、update、aggs 等) 此 API 帮助开发者了解集群配置了哪些脚本语言,以及每种语言可以在哪些场景中使用。 ## API 的参数 此 API **没有**路由参数和查询字符串参数。 ## 请求示例 ```bash # 查询支持的脚本语言 GET /_script_language ``` ## 响应示例 ```json { "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` | 模板脚本 | ## 使用示例 ### 查询支持的脚本语言 ```bash GET /_script_language ``` ### 使用 Painless 内联脚本 ```json POST /my-index/_update/1 { "script": { "lang": "painless", "source": "ctx._source.counter += params.increment", "params": { "increment": 1 } } } ``` ### 使用存储脚本 ```json POST /my-index/_update/1 { "script": { "id": "my-stored-script", "params": { "increment": 1 } } } ``` ### 使用 Expression 脚本 ```json { "script_fields": { "test_field": { "script": { "lang": "expression", "source": "doc['price'].value * params.tax", "params": { "tax": 1.2 } } } } } ``` ## 脚本语言选择建议 1. **Painless**: - 大多数脚本场景的首选 - 需要复杂逻辑时使用 - 需要访问文档字段时使用 2. **Expression**: - 简单数学运算 - 对性能要求极高的场景 - 只需要基本运算符的场景 3. **Mustache**: - 仅用于模板渲染 - 不用于计算脚本 ## 注意事项 1. 此 API 只支持 GET 方法 2. 不需要任何参数 3. 脚本语言支持取决于集群配置 4. 某些脚本语言可能需要插件支持 5. 不同的脚本上下文可能支持不同的语言 6. 生产环境中建议使用存储脚本而非内联脚本 ## 安全性考虑 1. **内联脚本**:在生产环境可能被禁用,建议使用存储脚本 2. **沙箱限制**:Painless 运行在受限的沙箱环境中 3. **权限控制**:某些脚本操作需要特定权限 ## 相关文档 - [查询脚本上下文](./get-script-context.md) - [创建或更新存储脚本](./create-or-update-stored-script.md) - [删除存储脚本](./delete-stored-script.md)