elasticsearch/docs/reference/search/multi-search-template-api.asciidoc

160 lines
4.3 KiB
Text

[[multi-search-template]]
=== Multi search template API
++++
<titleabbrev>Multi search template</titleabbrev>
++++
Runs multiple <<run-multiple-templated-searches,templated searches>> with a single
request.
////
[source,console]
----
PUT _scripts/my-search-template
{
"script": {
"lang": "mustache",
"source": {
"query": {
"match": {
"message": "{{query_string}}"
}
},
"from": "{{from}}",
"size": "{{size}}"
}
}
}
PUT my-index/_doc/1?refresh
{
"message": "hello world"
}
----
// TESTSETUP
////
[source,console]
----
GET my-index/_msearch/template
{ }
{ "id": "my-search-template", "params": { "query_string": "hello world", "from": 0, "size": 10 }}
{ }
{ "id": "my-other-search-template", "params": { "query_type": "match_all" }}
----
// TEST[s/my-other-search-template/my-search-template/]
[[multi-search-template-api-request]]
==== {api-request-title}
`GET <target>/_msearch/template`
`GET _msearch/template`
`POST <target>/_msearch/template`
`POST _msearch/template`
[[multi-search-template-api-prereqs]]
==== {api-prereq-title}
* If the {es} {security-features} are enabled, you must have the `read`
<<privileges-list-indices,index privilege>> for the target data stream, index,
or alias. For cross-cluster search, see <<remote-clusters>>.
[[multi-search-template-api-path-params]]
==== {api-path-parms-title}
`<target>`::
(Optional, string) Comma-separated list of data streams, indices, and aliases to
search. Supports wildcards (`*`). To search all data streams and indices, omit
this parameter or use `*`.
[[multi-search-template-api-query-params]]
==== {api-query-parms-title}
`ccs_minimize_roundtrips`::
(Optional, Boolean) If `true`, network round-trips are minimized for
cross-cluster search requests. Defaults to `true`.
`max_concurrent_searches`::
(Optional, integer) Maximum number of concurrent searches the API can run.
Defaults to +max(1, (# of <<data-node,data nodes>> *
min(<<search-threadpool,search thread pool size>>, 10)))+.
`rest_total_hits_as_int`::
(Optional, Boolean) If `true`, the response returns `hits.total` as an integer.
If false, it returns `hits.total` as an object. Defaults to `false`.
include::{es-ref-dir}/rest-api/common-parms.asciidoc[tag=search_type]
`typed_keys`::
(Optional, Boolean) If `true`, the response prefixes aggregation and suggester
names with their respective types. Defaults to `false`.
[role="child_attributes"]
[[multi-search-template-api-request-body]]
==== {api-request-body-title}
The request body must be newline-delimited JSON (NDJSON) in the following
format:
[source,js]
----
<header>\n
<body>\n
<header>\n
<body>\n
----
// NOTCONSOLE
Each `<header>` and `<body>` pair represents a search request.
The `<header>` supports the same parameters as the <<search-multi-search,multi
search API>>'s `<header>`. The `<body>` supports the same parameters as the
<<search-search-api-request-body,search template API>>'s request body.
include::multi-search.asciidoc[tag=header-params]
`<body>`::
(Request, object) Parameters for the search.
+
=====
include::search-template-api.asciidoc[tag=body-params]
=====
[[multi-search-template-api-response-codes]]
==== {api-response-codes-title}
The API returns a `400` status code only if the request itself fails. If one or
more searches in the request fail, the API returns a `200` status code with an
`error` object for each failed search in the response.
[[multi-search-template-api-response-body]]
==== {api-response-body-title}
`responses`::
(array of objects) Results for each search, returned in the order submitted.
Each object uses the same properties as the <<search-search,search API>>'s
response.
+
If a search fails, the response includes an `error` object containing an error
message.
[[multi-search-template-api-curl-requests]]
==== curl requests
If a providing text file or text input to `curl`, use the `--data-binary` flag
instead of `-d` to preserve newlines.
[source,sh]
----
$ cat requests
{ "index": "my-index" }
{ "id": "my-search-template", "params": { "query_string": "hello world", "from": 0, "size": 10 }}
{ "index": "my-other-index" }
{ "id": "my-other-search-template", "params": { "query_type": "match_all" }}
$ curl -H "Content-Type: application/x-ndjson" -XGET localhost:9200/_msearch/template --data-binary "@requests"; echo
----
// NOTCONSOLE