# Script Processor（脚本处理器）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/script-processor.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/script-processor.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10028259](http://www.apache.wiki/pages/viewpage.action?pageId=10028259)

贡献者 : [那伊抹微笑](/display/~wangyangting)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

可以在 **ingest** **pipelines** 中执行 **inline**，**stored**（存储），和 **file** **scripts**（文件脚本）。

请参阅 [如何使用脚本](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-scripting-using.html "如何使用脚本") 了解有关编写脚本的更多信息。**Script** **Processor**（脚本处理器）利用编译脚本的缓存来提高性能。由于处理器中指定的脚本可能会把每个 **document**（文档）给重新编译。因此了解脚本缓存的工作原理是非常重要的。要了解有关缓存的更多信息，请参阅 [脚本缓存](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-scripting-using.html#modules-scripting-using-caching "脚本Cachingedit")。

## Table 28. Script Options（表 28\. 脚本选项）

| Name（名称） | Required（必要的） | Default（默认值） | Description（描述） |
| --- | --- | --- | --- |
| **`lang`** | **no** | **"painless"** | 脚本语言 |
| **`file`** | **no** | **-** | 要引用的脚本文件 |
| **`id`** | **no** | **-** | 要引用所存储的脚本 **ID** |
| **`inline`** | **no** | **-** | An inline script to be executed |
| **`params`** | **no** | **-** | 脚本参数 |

**filed**，**id**，**inline** 中的选项必须提供，为了正确的引用脚本以执行。

您可以通过使用 **`ctx `**变量从脚本 **context**（上下文）中访问当前的 **ingest document**。

以下示例设置了一个名为 **field_a_plus_b_times_c** 的新字段，它是两个现有字段 **filed_a** 和 **field_b** 的和，然后再乘以参数 **param_c** 的值。

```
{
  "script": {
    "lang": "painless",
    "inline": "ctx.field_a_plus_b_times_c = (ctx.field_a + ctx.field_b) * params.param_c",
    "params": {
      "param_c": 10
    }
  }
}
```