[[query-dsl-template-query]] === Template Query added[1.1.0] A query that accepts a query template and a map of key/value pairs to fill in template parameters. [source,js] ------------------------------------------ GET /_search { "query": { "template": { "query": {"match_{{template}}": {}}, "params" : { "template" : "all" } } } } ------------------------------------------ Alternatively passing the template as an escaped string works as well: [source,js] ------------------------------------------ GET /_search { "query": { "template": { "query": "{\"match_{{template}}\": {}}\"", <1> "params" : { "template" : "all" } } } } ------------------------------------------ <1> New line characters (`\n`) should be escaped as `\\n` or removed, and quotes (`"`) should be escaped as `\\"`. You can register a template by storing it in the `config/scripts` directory, in a file using the `.mustache` extension. In order to execute the stored template, reference it by name in the `query` parameter: [source,js] ------------------------------------------ GET /_search { "query": { "template": { "query": "storedTemplate", <1> "params" : { "template" : "all" } } } } ------------------------------------------ <1> Name of the the query template in `config/scripts/`, i.e., `storedTemplate.mustache`. Templating is based on Mustache. For simple token substitution all you provide is a query containing some variable that you want to substitute and the actual values: [source,js] ------------------------------------------ GET /_search { "query": { "template": { "query": {"match_{{template}}": {}}, "params" : { "template" : "all" } } } } ------------------------------------------ which is then turned into: [source,js] ------------------------------------------ { "query": { "match_all": {} } } ------------------------------------------ There is also a dedicated `template` endpoint, allows you to template an entire search request. Please see <> for more details.