How to use scripts in elastic search
- Digital Engineering
- General
- Ecommerce
How to use scripts in elastic search
Wherever scripting is supported in the Elasticsearch API, the syntax follows the same pattern:
|
1 2 3 4 5 |
"script": { "lang": "...", "source" | "id": "...", "params": { ... } } |
The language the script is written in, which defaults to painless. The script itself which may be specified as source for an inline script or id for a stored script. Any named parameters that should be passed into the script.
For example, the following script is used in a search request to return a scripted field:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
PUT my_index/_doc/1 { "my_field": 5 } GET my_index/_search { "script_fields": { "my_doubled_field": { "script": { "lang": "expression", "source": "doc['my_field'] * multiplier", "params": { "multiplier": 2 } } } } } |
Script Parameters
lang- Specifies the language the script is written in. Defaults to
painless. source,id- Specifies the source of the script. An
inlinescript is specifiedsourceas in the example above. Astoredscript is specifiedidand is retrieved from the cluster state (see Stored Scripts). params- Specifies any named parameters that are passed into the script as variables.
- The first time Elasticsearch sees a new script, it compiles it and stores the compiled version in a cache. Compilation can be a heavy process.
If you need to pass variables into the script, you should pass them in as named
paramsinstead of hard-coding values into the script itself. For example, if you want to be able to multiply a field value by different multipliers, don’t hard-code the multiplier into the script:1"source": "doc['my_field'] * 2"Instead, pass it in as a named parameter:
1234"source": "doc['my_field'] * multiplier","params": {"multiplier": 2}The first version has to be recompiled every time the multiplier changes. The second version is only compiled once.
If you compile too many unique scripts within a small amount of time, Elasticsearch will reject the new dynamic scripts with a
circuit_breaking_exceptionerror. By default, up to 15 inline scripts per minute will be compiled. You can change this setting dynamically by settingscript.max_compilations_rate.Stored Scriptsedit
Scripts may be stored in and retrieved from the cluster state using the
_scriptsend-point.Request Examplesedit
The following are examples of using a stored script that lives at
/_scripts/{id}.First, create the script called
calculate-scorein the cluster state:1234567POST _scripts/calculate-score{"script": {"lang": "painless","source": "Math.log(_score * 2) + params.my_modifier"}}This same script can be retrieved with:
1GET _scripts/calculate-scoreStored scripts can be used by specifying the
idparameters as follows:12345678910111213GET _search{"query": {"script": {"script": {"id": "calculate-score","params": {"my_modifier": 2}}}}}And deleted with:
1DELETE _scripts/calculate-score
Related content
Auriga: Leveling Up for Enterprise Growth!
Auriga’s journey began in 2010 crafting products for India’s
