[role="xpack"] [[search-application-search]] === Search Application Search beta::[] ++++ Search Application Search ++++ Given specified query parameters, generates and executes an {es} query using the search template associated with the search application or a default template if none is specified. Unspecified template parameters will be assigned their default values (if applicable). [[search-application-search-request]] ==== {api-request-title} `POST _application/search_application//_search` [[search-application-search-prereqs]] ==== {api-prereq-title} Requires read privileges on the backing alias of the search application. [[search-application-search-path-params]] ==== {api-path-parms-title} `typed_keys`:: (Optional, Boolean) If `true`, aggregation and suggester names are prefixed by their respective types in the response. Defaults to `false`. [[search-application-search-request-body]] ==== {api-request-body-title} `params`:: (Optional, map of strings to objects) Query parameters used to generate the {es} query from the search template associated with the search application. If a parameter used in the search template is not specified in `params`, the parameter's default value will be used. [NOTE] ==== The search application can be configured to validate search template parameters. See the `dictionary` parameter in the <> API for more information. ==== [[search-application-search-response-codes]] ==== {api-response-codes-title} `400`:: Invalid parameter passed to search template. Examples include: - Missing required parameter - Invalid parameter data type - Invalid parameter value `404`:: Search Application `` does not exist. [[search-application-search-example]] ==== {api-examples-title} The following example executes a search against a search application called `my-app` that uses the search template from the <>: //// [source,console] ---- PUT /index1 PUT /index1/_doc/1?refresh=true { "title": "Sample document", "description": "A sample document that matches my first query" } PUT _application/search_application/my-app { "indices": ["index1"], "template": { "script": { "lang": "mustache", "source": """ { "query": { "multi_match": { "query": "{{query_string}}", "fields": [{{#text_fields}}"{{name}}^{{boost}}",{{/text_fields}}] } }, "explain": "{{explain}}", "from": "{{from}}", "size": "{{size}}" } """, "params": { "query_string": "*", "text_fields": [ {"name": "title", "boost": 10}, {"name": "description", "boost": 5} ], "explain": false, "from": 0, "size": 10 } } } } ---- // TESTSETUP ////////////////////////// [source,console] -------------------------------------------------- DELETE _application/search_application/my-app DELETE /index1 -------------------------------------------------- // TEARDOWN //// [source,console] ---- POST _application/search_application/my-app/_search { "params": { "query_string": "my first query", "text_fields": [ {"name": "title", "boost": 5}, {"name": "description", "boost": 1} ] } } ---- The generated {es} query would look like: [source,console-result] ---- { "from": 0, "size": 10, "query": { "multi_match": { "query": "my first query", "fields": [ "description^1.0", "title^5.0" ] } }, "explain": false } ---- // TESTRESPONSE[skip:result of request not run in this document] In this case, the `from`, `size`, and `explain` parameters are not specified in the request, so the default values specified in the search template are used. The expected response is the search results from the {es} query that was generated & executed. The response format is the same as that used by the <>: [source,console-result] ---- { "took": 5, "timed_out": false, "_shards": { "total": 1, "successful": 1, "skipped": 0, "failed": 0 }, "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.8630463, "hits": ... } } ---- // TESTRESPONSE[s/"took": 5/"took": $body.$_path/] // TESTRESPONSE[s/"hits": \.\.\./"hits": $body.$_path/]