[[search-request-body]]
== Request Body Search

The search request can be executed with a search DSL, which includes the
<<query-dsl,Query DSL>>, within its body. Here is an
example:

[source,js]
--------------------------------------------------
$ curl -XGET 'http://localhost:9200/twitter/tweet/_search' -d '{
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
'
--------------------------------------------------

And here is a sample response:

[source,js]
--------------------------------------------------
{
    "_shards":{
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "tweet",
                "_id" : "1",
                "_source" : {
                    "user" : "kimchy",
                    "postDate" : "2009-11-15T14:12:12",
                    "message" : "trying out Elasticsearch"
                }
            }
        ]
    }
}
--------------------------------------------------

[float]
=== Parameters

[cols="<,<",options="header",]
|=======================================================================
|Name |Description
|`timeout` |A search timeout, bounding the search request to be executed
within the specified time value and bail with the hits accumulated up to
that point when expired. Defaults to no timeout.

|`from` |The starting from index of the hits to return. Defaults to `0`.

|`size` |The number of hits to return. Defaults to `10`.

|`search_type` |The type of the search operation to perform. Can be
`dfs_query_then_fetch`, `dfs_query_and_fetch`, `query_then_fetch`,
`query_and_fetch`. Defaults to `query_then_fetch`. See
<<search-request-search-type,_Search Type_>> for
more details on the different types of search that can be performed.

|coming[1.4.0] `terminate_after` |The maximum number of documents to collect for
each shard, upon reaching which the query execution will terminate early.
If set, the response will have a boolean field `terminated_early` to
indicate whether the query execution has actually terminated_early.
Defaults to no terminate_after.
|=======================================================================

Out of the above, the `search_type` is the one that can not be passed
within the search request body, and in order to set it, it must be
passed as a request REST parameter.

The rest of the search request should be passed within the body itself.
The body content can also be passed as a REST parameter named `source`.

Both HTTP GET and HTTP POST can be used to execute search with body.
Since not all clients support GET with body, POST is allowed as well.


include::request/query.asciidoc[]

include::request/from-size.asciidoc[]

include::request/sort.asciidoc[]

include::request/source-filtering.asciidoc[]

include::request/fields.asciidoc[]

include::request/script-fields.asciidoc[]

include::request/fielddata-fields.asciidoc[]

include::request/post-filter.asciidoc[]

include::request/highlighting.asciidoc[]

include::request/rescore.asciidoc[]

include::request/search-type.asciidoc[]

include::request/scroll.asciidoc[]

include::request/preference.asciidoc[]

include::request/explain.asciidoc[]

include::request/version.asciidoc[]

include::request/index-boost.asciidoc[]

include::request/min-score.asciidoc[]

include::request/named-queries-and-filters.asciidoc[]
