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
|
[[query-dsl-template-query]]
=== Template Query
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": {
"query": { "match": { "text": "{{query_string}}" }},
"params" : {
"query_string" : "all about search"
}
}
}
}
------------------------------------------
The above request is translated into:
[source,js]
------------------------------------------
GET /_search
{
"query": {
"match": {
"text": "all about search"
}
}
}
------------------------------------------
Alternatively passing the template as an escaped string works as well:
[source,js]
------------------------------------------
GET /_search
{
"query": {
"template": {
"query": "{ \"match\": { \"text\": \"{{query_string}}\" }}", <1>
"params" : {
"query_string" : "all about search"
}
}
}
}
------------------------------------------
<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"
}
}
}
}
------------------------------------------
<1> Name of the the query template in `config/scripts/`, i.e., `my_template.mustache`.
Alternatively, you can register a query template in the special `.scripts` index with:
[source,js]
------------------------------------------
PUT /_search/template/my_template
{
"template": { "match": { "text": "{{query_string}}" }},
}
------------------------------------------
and refer to it in the `template` query with the `id` parameter:
[source,js]
------------------------------------------
GET /_search
{
"query": {
"template": {
"id": "my_template", <1>
"params" : {
"query_string" : "all about search"
}
}
}
}
------------------------------------------
<1> Name of the the query template in `config/scripts/`, i.e., `storedTemplate.mustache`.
There is also a dedicated `template` endpoint, allows you to template an entire search request.
Please see <<search-template>> for more details.
|