Adds execute script API (#1769)
* Adds execute script API Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Reword a sentence Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Punctuation Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> * Update _api-reference/script-apis/exec-script.md Co-authored-by: Nate Bower <nbower@amazon.com> * Update _api-reference/script-apis/exec-script.md Co-authored-by: Nate Bower <nbower@amazon.com> * Update _api-reference/script-apis/exec-script.md Co-authored-by: Nate Bower <nbower@amazon.com> * Update _api-reference/script-apis/exec-script.md Co-authored-by: Nate Bower <nbower@amazon.com> * Incorporated editorial comments Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> Signed-off-by: Fanit Kolchina <kolchfa@amazon.com> Co-authored-by: Nate Bower <nbower@amazon.com>
This commit is contained in:
parent
2d0959c35f
commit
b01d901caf
|
@ -0,0 +1,182 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
title: Execute Painless script
|
||||||
|
parent: Script APIs
|
||||||
|
nav_order: 7
|
||||||
|
---
|
||||||
|
|
||||||
|
## Execute Painless script
|
||||||
|
|
||||||
|
The Execute Painless script API allows you to run a script that is not stored.
|
||||||
|
|
||||||
|
### Path and HTTP methods
|
||||||
|
|
||||||
|
```json
|
||||||
|
GET /_scripts/painless/_execute
|
||||||
|
POST /_scripts/painless/_execute
|
||||||
|
```
|
||||||
|
|
||||||
|
### Request fields
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
:--- | :---
|
||||||
|
| script | The script to run. Required|
|
||||||
|
| context | A context for the script. Optional. Default is `painless_test`. |
|
||||||
|
| context_setup | Specifies additional parameters for the context. Optional.|
|
||||||
|
|
||||||
|
#### Sample request
|
||||||
|
|
||||||
|
The following request uses the default `painless_context` for the script:
|
||||||
|
|
||||||
|
```json
|
||||||
|
GET /_scripts/painless/_execute
|
||||||
|
{
|
||||||
|
"script": {
|
||||||
|
"source": "(params.x + params.y)/ 2",
|
||||||
|
"params": {
|
||||||
|
"x": 80,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Sample response
|
||||||
|
|
||||||
|
The response contains the average of two script parameters:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result" : "90"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Response fields
|
||||||
|
|
||||||
|
| Field | Description |
|
||||||
|
:--- | :---
|
||||||
|
| result | The script result.|
|
||||||
|
|
||||||
|
|
||||||
|
## Script contexts
|
||||||
|
|
||||||
|
Choose different contexts to control the variables that are available to the script and the result's return type. The default context is `painless_test`.
|
||||||
|
|
||||||
|
### Painless test context
|
||||||
|
|
||||||
|
The `painless_test` context is the default script context that provides only the `params` variable to the script. The returned result is always converted to a string. See the preceding sample request for a usage example.
|
||||||
|
|
||||||
|
### Filter context
|
||||||
|
|
||||||
|
The `filter` context runs the script as if the script were inside a script query. You must provide a test document in the context. The `_source`, stored fields, and `_doc` variables will be available to the script.
|
||||||
|
|
||||||
|
You can specify the following parameters for the filter context in the `context_setup`.
|
||||||
|
|
||||||
|
Parameter | Description
|
||||||
|
:--- | :---
|
||||||
|
document | The document that is indexed in memory temporarily and available to the script.
|
||||||
|
index | The name of the index that contains a mapping for the document.
|
||||||
|
|
||||||
|
For example, first create an index with a mapping for a test document:
|
||||||
|
|
||||||
|
```json
|
||||||
|
PUT /testindex1
|
||||||
|
{
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"grad": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"gpa": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Run a script to determine if a student is eligible to graduate with honors:
|
||||||
|
|
||||||
|
```json
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The response contains the result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result" : true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Score context
|
||||||
|
|
||||||
|
The `score` context runs a script as if the script were in a `script_score` function in a `function_score` query.
|
||||||
|
|
||||||
|
You can specify the following parameters for the score context in the `context_setup`.
|
||||||
|
|
||||||
|
Parameter | Description
|
||||||
|
:--- | :---
|
||||||
|
document | The document that is indexed in memory temporarily and available to the script.
|
||||||
|
index | The name of the index that contains a mapping for the document.
|
||||||
|
query | If the script uses the `_score` parameter, the query can specify to use the `_score` field to compute the score.
|
||||||
|
|
||||||
|
For example, first create an index with a mapping for a test document:
|
||||||
|
|
||||||
|
```json
|
||||||
|
PUT /testindex1
|
||||||
|
{
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"gpa_4_0": {
|
||||||
|
"type": "float"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Run a script that converts a GPA on a 4.0 scale into a different scale that is provided as a parameter:
|
||||||
|
|
||||||
|
```json
|
||||||
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The response contains the result:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"result" : 4.375
|
||||||
|
}
|
||||||
|
```
|
Loading…
Reference in New Issue