Link Search Menu Expand Document Documentation Menu

执行 Painless 脚本

1.0 版引入

执行 Painless 脚本 API 允许您运行未存储的脚本。

端点

GET /_scripts/painless/_execute
POST /_scripts/painless/_execute

请求正文字段

字段 描述
script(脚本) 要运行的脚本。必需
context 脚本的上下文。可选。默认为 painless_test
context_setup 指定上下文的额外参数。可选。

请求示例

以下请求使用脚本的默认 painless_context

GET /_scripts/painless/_execute
{
  "script": {
    "source": "(params.x + params.y)/ 2",
    "params": {
      "x": 80,
      "y": 100
    }
  }
}

示例响应

响应包含两个脚本参数的平均值

{
  "result" : "90"
}

响应正文字段

字段 描述
result 脚本结果。

脚本上下文

选择不同的上下文来控制脚本可用的变量以及结果的返回类型。默认上下文是 painless_test

Painless 测试上下文

painless_test 上下文是默认的脚本上下文,它只向脚本提供 params 变量。返回结果始终转换为字符串。请参阅前面的请求示例以获取使用示例。

过滤器上下文

filter 上下文运行脚本,就像脚本在脚本查询内部一样。您必须在上下文中提供一个测试文档。_source、存储字段和 _doc 变量将可用于脚本。

您可以在 context_setup 中为过滤器上下文指定以下参数。

参数 描述
document 临时在内存中索引并可供脚本使用的文档。
index 包含文档映射的索引名称。

例如,首先创建一个包含测试文档映射的索引

PUT /testindex1
{
  "mappings": {
    "properties": {
      "grad": {
        "type": "boolean"
      },
      "gpa": {
        "type": "float"
      }
    }
  }
}

运行一个脚本来确定学生是否有资格以优异成绩毕业

POST /_scripts/painless/_execute
{
  "script": {
    "source": "doc['grad'].value == true && doc['gpa'].value >= params.min_honors_gpa",
    "params": {
      "min_honors_gpa": 3.5
    }
  },
  "context": "filter",
  "context_setup": {
    "index": "testindex1",
    "document": {
      "grad": true,
      "gpa": 3.79
    }
  }
}

响应包含结果

{
  "result" : true
}

评分上下文

score 上下文运行脚本,就像脚本位于 function_score 查询中的 script_score 函数中一样。

您可以在 context_setup 中为评分上下文指定以下参数。

参数 描述
document 临时在内存中索引并可供脚本使用的文档。
index 包含文档映射的索引名称。
query 如果脚本使用 _score 参数,查询可以指定使用 _score 字段来计算得分。

例如,首先创建一个包含测试文档映射的索引

PUT /testindex1
{
  "mappings": {
    "properties": {
      "gpa_4_0": {
        "type": "float"
      }
    }
  }
}

运行一个脚本,将 4.0 绩点制下的 GPA 转换为作为参数提供的不同比例。

POST /_scripts/painless/_execute
{
  "script": {
    "source": "doc['gpa_4_0'].value * params.max_gpa / 4.0",
    "params": {
      "max_gpa": 5.0
    }
  },
  "context": "score",
  "context_setup": {
    "index": "testindex1",
    "document": {
      "gpa_4_0": 3.5
    }
  }
}

响应包含结果

{
  "result" : 4.375
}
剩余 350 字符

有问题?

想贡献?