[[breaking_20_scripting_changes]] === Scripting changes ==== Scripting syntax The syntax for scripts has been made consistent across all APIs. The accepted format is as follows: Inline/Dynamic scripts:: + -- [source,js] --------------- "script": { "inline": "doc['foo'].value + val", <1> "lang": "groovy", <2> "params": { "val": 3 } <3> } --------------- <1> The inline script to execute. <2> The optional language of the script. <3> Any named parameters. -- Indexed scripts:: + -- [source,js] --------------- "script": { "id": "my_script_id", <1> "lang": "groovy", <2> "params": { "val": 3 } <3> } --------------- <1> The ID of the indexed script. <2> The optional language of the script. <3> Any named parameters. -- File scripts:: + -- [source,js] --------------- "script": { "file": "my_file", <1> "lang": "groovy", <2> "params": { "val": 3 } <3> } --------------- <1> The filename of the script, without the `.lang` suffix. <2> The optional language of the script. <3> Any named parameters. -- For example, an update request might look like this: [source,js] --------------- POST my_index/my_type/1/_update { "script": { "inline": "ctx._source.count += val", "params": { "val": 3 } }, "upsert": { "count": 0 } } --------------- A short syntax exists for running inline scripts in the default scripting language without any parameters: [source,js] ---------------- GET _search { "script_fields": { "concat_fields": { "script": "doc['one'].value + ' ' + doc['two'].value" } } } ---------------- ==== Scripting settings The `script.disable_dynamic` node setting has been replaced by fine-grained script settings described in <>. ==== Groovy scripts sandbox The Groovy sandbox and related settings have been removed. Groovy is now a non-sandboxed scripting language, without any option to turn the sandbox on. ==== Plugins making use of scripts Plugins that make use of scripts must register their own script context through `ScriptModule`. Script contexts can be used as part of fine-grained settings to enable/disable scripts selectively.