mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-05-20 15:44:48 +00:00
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
115 lines
2.8 KiB
Plaintext
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.
|
|
|