Painless execute API
editPainless execute API
editThe painless execute api is new and the request / response format may change in a breaking way in the future
The Painless execute API allows an arbitrary script to be executed and a result to be returned.
Table 1. Parameters
Name | Required | Default | Description |
---|---|---|---|
|
yes |
- |
The script to execute |
|
no |
|
The context the script should be executed in. |
|
no |
- |
Additional parameters to the context. |
Contexts
editContexts control how scripts are executed, what variables are available at runtime and what the return type is.
Painless test context
editThe painless_test
context executes scripts as is and do not add any special parameters.
The only variable that is available is params
, which can be used to access user defined values.
The result of the script is always converted to a string.
If no context is specified then this context is used by default.
Example
Request:
POST /_scripts/painless/_execute { "script": { "source": "params.count / params.total", "params": { "count": 100.0, "total": 1000.0 } } }
Response:
{ "result": "0.1" }
Filter context
editThe filter
context executes scripts as if they were executed inside a script
query.
For testing purposes a document must be provided that will be indexed temporarily in-memory and
is accessible to the script being tested. Because of this the _source, stored fields and doc values
are available in the script being tested.
The following parameters may be specified in context_setup
for a filter context:
- document
- Contains the document that will be temporarily indexed in-memory and is accessible from the script.
- index
- The name of an index containing a mapping that is compatible with the document being indexed.
Example
PUT /my-index { "mappings": { "properties": { "field": { "type": "keyword" } } } } POST /_scripts/painless/_execute { "script": { "source": "doc['field'].value.length() <= params.max_length", "params": { "max_length": 4 } }, "context": "filter", "context_setup": { "index": "my-index", "document": { "field": "four" } } }
Response:
{ "result": true }
Score context
editThe score
context executes scripts as if they were executed inside a script_score
function in
function_score
query.
The following parameters may be specified in context_setup
for a score context:
- document
- Contains the document that will be temporarily indexed in-memory and is accessible from the script.
- index
- The name of an index containing a mapping that is compatible with the document being indexed.
- query
-
If
_score
is used in the script then a query can specified that will be used to compute a score.
Example
PUT /my-index { "mappings": { "properties": { "field": { "type": "keyword" }, "rank": { "type": "long" } } } } POST /_scripts/painless/_execute { "script": { "source": "doc['rank'].value / params.max_rank", "params": { "max_rank": 5.0 } }, "context": "score", "context_setup": { "index": "my-index", "document": { "rank": 4 } } }
Response:
{ "result": 0.8 }