| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | [[java-rest-high-explain]]=== Explain APIThe explain api computes a score explanation for a query and a specific document.This can give useful feedback whether a document matches or didn’t match a specific query.[[java-rest-high-explain-request]]==== Explain RequestAn `ExplainRequest` expects an `index` and an `id` to specify a certain document,and a query represented by `QueryBuilder` to run against it (the way of <<java-rest-high-query-builders, building queries>>).["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-request]--------------------------------------------------===== Optional arguments["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-request-routing]--------------------------------------------------<1> Set a routing parameter["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-request-preference]--------------------------------------------------<1> Use the preference parameter e.g. to execute the search to prefer localshards. The default is to randomize across shards.["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-request-source]--------------------------------------------------<1> Set to true to retrieve the _source of the document explained. You can alsoretrieve part of the document by using _source_include & _source_exclude(see <<java-rest-high-document-get-request-optional-arguments, Get API>> for more details)["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-request-stored-field]--------------------------------------------------<1> Allows to control which stored fields to return as part of the document explained(requires the field to be stored separately in the mappings).[[java-rest-high-explain-sync]]==== Synchronous ExecutionThe `explain` method executes the request synchronously:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-execute]--------------------------------------------------[[java-rest-high-explain-async]]==== Asynchronous ExecutionThe `explainAsync` method executes the request asynchronously,calling the provided `ActionListener` when the response is ready:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-execute-async]--------------------------------------------------<1> The `ExplainRequest` to execute and the `ActionListener` to use whenthe execution completes.The asynchronous method does not block and returns immediately. Once the requestcompletes, the `ActionListener` is called back using the `onResponse` methodif the execution successfully completed or using the `onFailure` method ifit failed.A typical listener for `ExplainResponse` is constructed as follows:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-execute-listener]--------------------------------------------------<1> Called when the execution is successfully completed.<2> Called when the whole `ExplainRequest` fails.[[java-rest-high-explain-response]]==== ExplainResponseThe `ExplainResponse` contains the following information:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[explain-response]--------------------------------------------------<1> The index name of the explained document.<2> The id of the explained document.<3> Indicates whether or not the explained document exists.<4> Indicates whether or not there is a match between the explained document andthe provided query (the `match` is retrieved from the lucene `Explanation` behind the scenesif the lucene `Explanation` models a match, it returns `true`, otherwise it returns `false`).<5> Indicates whether or not there exists a lucene `Explanation` for this request.<6> Get the lucene `Explanation` object if there exists.<7> Get the `GetResult` object if the `_source` or the stored fields are retrieved.The `GetResult` contains two maps internally to store the fetched `_source` and stored fields.You can use the following methods to get them:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/SearchDocumentationIT.java[get-result]--------------------------------------------------<1> Retrieve the `_source` as a map.<2> Retrieve the specified stored fields as a map.
 |