summaryrefslogtreecommitdiff
path: root/docs/reference/query-dsl/template-query.asciidoc
blob: 2d3b5724d49ef82ef51e6fd3b9c5bc66c3371bbb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
[[query-dsl-template-query]]
=== Template Query

deprecated[5.0.0, Use the <<search-template>> API]

A query that accepts a query template and a map of key/value pairs to fill in
template parameters. 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": {
            "inline": { "match": { "text": "{{query_string}}" }},
            "params" : {
                "query_string" : "all about search"
            }
        }
    }
}
------------------------------------------
// CONSOLE
// TEST[warning:[template] query is deprecated, use search template api instead]

The above request is translated into:

[source,js]
------------------------------------------
GET /_search
{
    "query": {
        "match": {
            "text": "all about search"
        }
    }
}
------------------------------------------
// CONSOLE

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

[source,js]
------------------------------------------
GET /_search
{
    "query": {
        "template": {
            "inline": "{ \"match\": { \"text\": \"{{query_string}}\" }}", <1>
            "params" : {
                "query_string" : "all about search"
            }
        }
    }
}
------------------------------------------
// CONSOLE
// TEST[warning:[template] query is deprecated, use search template api instead]

<1> New line characters (`\n`) should be escaped as `\\n` or removed,
    and quotes (`"`) should be escaped as `\\"`.

==== Stored templates

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 `file`
parameter:


[source,js]
------------------------------------------
GET /_search
{
    "query": {
        "template": {
            "file": "my_template", <1>
            "params" : {
                "query_string" : "all about search"
            }
        }
    }
}
------------------------------------------
// CONSOLE
// TEST[warning:[template] query is deprecated, use search template api instead]

<1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`.

Alternatively, you can register a query template in the cluster state with:

[source,js]
------------------------------------------
PUT /_search/template/my_template
{
    "template": { "match": { "text": "{{query_string}}" }}
}
------------------------------------------
// CONSOLE

and refer to it in the `template` query with the `id` parameter:


[source,js]
------------------------------------------
GET /_search
{
    "query": {
        "template": {
            "stored": "my_template", <1>
            "params" : {
                "query_string" : "all about search"
            }
        }
    }
}
------------------------------------------
// CONSOLE
// TEST[continued]
// TEST[warning:[template] query is deprecated, use search template api instead]

<1> Name of the query template in `config/scripts/`, i.e., `my_template.mustache`.


There is also a dedicated `template` endpoint, allows you to template an entire search request.
Please see <<search-template>> for more details.