执行 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
}