Template Query

edit

Added in 1.1.0.

A query that accepts a query template and a map of key/value pairs to fill in template parameters.

GET /_search
{
    "query": {
        "template": {
            "query": {"match_{{template}}": {}},
            "params" : {
                "template" : "all"
            }
        }
    }
}

Alternatively passing the template as an escaped string works as well:

GET /_search
{
    "query": {
        "template": {
            "query": "{\"match_{{template}}\": {}}\"", 
            "params" : {
                "template" : "all"
            }
        }
    }
}

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:

GET /_search
{
    "query": {
        "template": {
            "query": "storedTemplate", 
            "params" : {
                "template" : "all"
            }
        }
    }
}

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:

GET /_search
{
    "query": {
        "template": {
            "query": {"match_{{template}}": {}},
            "params" : {
                "template" : "all"
            }
        }
    }
}

which is then turned into:

{
    "query": {
        "match_all": {}
    }
}

Added in 1.3.0.

You can register a template by storing it in the elasticsearch index .scripts or by using the REST API. (See Search Template for more details) In order to execute the stored template, reference it by name in the query parameter:

GET /_search
{
    "query": {
        "template": {
            "query": "templateName", 
            "params" : {
                "template" : "all"
            }
        }
    }
}

Name of the the query template stored in the index.

GET /_search
{
    "query": {
        "template": {
            "query": "storedTemplate", 
            "params" : {
                "template" : "all"
            }
        }
    }
}

There is also a dedicated template endpoint, allows you to template an entire search request. Please see Search Template for more details.