* Add script documentation. Signed-off-by: Steve Murphy <[email protected]> * Use my own example script insteady of Elastic's. Signed-off-by: Steve Murphy <[email protected]> * edditing and format changes. verified API requests and scripts. various corrections Signed-off-by: ariamarble <[email protected]> * made a couple of suggested changes Signed-off-by: ariamarble <[email protected]> * made further corrections Signed-off-by: ariamarble <[email protected]> Signed-off-by: Steve Murphy <[email protected]> Signed-off-by: ariamarble <[email protected]> Co-authored-by: Steve Murphy <[email protected]>
3.9 KiB
layout, title, parent, grand_parent, nav_order
| layout | title | parent | grand_parent | nav_order |
|---|---|---|---|---|
| default | Create or Update Stored Script | Script APIs | REST API reference | 1 |
Create or update stored script
Creates or updates a stored script or search template.
For additonal information about Painless scripting, see:
Path parameters
| Parameter | Data Type | Description |
|---|---|---|
| script-id | String | Stored script or search template ID. Must be unique across the cluster. Required. |
Query parameters
All parameters are optional.
| Parameter | Data Type | Description |
|---|---|---|
| context | String | Context in which the script or search template is to run. To prevent errors, the API immediately compiles the script or template in this context. |
| cluster_manager_timeout | Time | Amount of time to wait for a connection to the cluster manager. Defaults to 30 seconds. |
| timeout | Time | The period of time to wait for a response. If a response is not received before the timeout value, the request fails and returns an error. Defaults to 30 seconds. |
Request fields
| Field | Data Type | Description |
|---|---|---|
| script | Object | Defines the script or search template, its parameters, and its language. See Script object below. |
Script object
| Field | Data Type | Description |
|---|---|---|
| lang | String | Scripting language. Required. |
| source | String or Object | Required. For scripts, a string with the contents of the script. For search templates, an object that defines the search template. Supports the same parameters as the Search API's request body. Search templates also support Mustache variables. |
| params | Object | The script's or search template's parameters. |
Sample request
The sample uses an index called books with the following documents:
{"index":{"_id":1}}
{"name":"book1","author":"Faustine","ratings":[4,3,5]}
{"index":{"_id":2}}
{"name":"book2","author":"Amit","ratings":[5,5,5]}
{"index":{"_id":3}}
{"name":"book3","author":"Gilroy","ratings":[2,1,5]}
The following request creates the Painless script my-first-script. It sums the ratings for each book and displays the sum in the output.
PUT _scripts/my-first-script
{
"script": {
"lang": "painless",
"source": """
int total = 0;
for (int i = 0; i < doc['ratings'].length; ++i) {
total += doc['ratings'][i];
}
return total;
"""
}
}
The example above uses the syntax of the Dev Tools console in OpenSearch Dashboards. You can also use a curl request. {: .note }
The following curl request is equivalent to the previous Dashboards console example:
curl -XPUT "http://opensearch:9200/_scripts/my-first-script" -H 'Content-Type: application/json' -d'
{
"script": {
"lang": "painless",
"source": "\n int total = 0;\n for (int i = 0; i < doc['\''ratings'\''].length; ++i) {\n total += doc['\''ratings'\''][i];\n }\n return total;\n "
}
}'
See Execute Painless stored script for information about running the script.
Sample response
The PUT _scripts/my-first-script request returns the following field:
{
"acknowledged" : true
}
To determine whether the script was successfully created, use the Get stored script API, passing the script name as the script path parameter.
{: .note}
Response fields
| Field | Data Type | Description |
|---|---|---|
| acknowledged | Boolean | whether the request was received. |