(Painless) Scripting
Scripting enables you to evaluate custom expressions.
As explored in 2. Insertion & Ingestion , we can modify fields.
And as mentioned in Points Closest to the Origin , we can dynamically score documents and calculate new values on-the-fly.
Scripts can be used in various contexts but are leveraged most often:
The default scripting language is Painless . Additional lang plugins enable you to run scripts written in other languages. Everywhere a script can be used, you can include a lang parameter to specify the language of the script.
— slow and discontinuedgroovypainless— a sandboxed and secure general-purpose language extending a subset of Java's syntax; offers optional typing through thedefkeyword-
expression— Lucene expressions — a sandboxed, javascript-like language used for fast custom ranking and sorting but limited to only numeric, boolean, date, and geo_point fields -
mustache— used in (search) templates. Here's an example. - and good old
java— supporting lower-level script engine modules
The script syntax always follows the same pattern:
"script": {
"lang": "...",
"source": "...",
"params": { ... }
} though the source field is sometimes interchanged with id — denoting a Stored Script .
Short form (inline scripts) is also supported:
"script": "..." but you'll lose access to the params dictionary.
Prefer params whenever possible! The first time Elasticsearch sees a new script, it compiles it and stores the compiled version in a cache — but note that compilation can be a heavy process.