OpenSearch/docs/reference/query-dsl/template-query.asciidoc
Colin Goodheart-Smithe 35a58d874e Scripting: Unify script and template requests across codebase
This change unifies the way scripts and templates are specified for all instances in the codebase. It builds on the Script class added previously and adds request building and parsing support as well as the ability to transfer script objects between nodes. It also adds a Template class which aims to provide the same functionality for template APIs

Closes #11091
2015-05-29 16:52:04 +01:00

115 lines
2.8 KiB
Plaintext

[[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": {
"inline": { "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": {
"inline": "{ \"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.