[[breaking_50_search_changes]]
=== Search and Query DSL changes

==== `search_type`

===== `search_type=count` removed

The `count` search type was deprecated since version 2.0.0 and is now removed.
In order to get the same benefits, you just need to set the value of the `size`
parameter to `0`.

For instance, the following request:

[source,sh]
---------------
GET /my_index/_search?search_type=count
{
  "aggs": {
    "my_terms": {
       "terms": {
         "field": "foo"
       }
     }
  }
}
---------------

can be replaced with:

[source,sh]
---------------
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "my_terms": {
       "terms": {
         "field": "foo"
       }
     }
  }
}
---------------

===== `search_type=scan` removed

The `scan` search type was deprecated since version 2.1.0 and is now removed.
All benefits from this search type can now be achieved by doing a scroll
request that sorts documents in `_doc` order, for instance:

[source,sh]
---------------
GET /my_index/_search?scroll=2m
{
  "sort": [
    "_doc"
  ]
}
---------------

Scroll requests sorted by `_doc` have been optimized to more efficiently resume
from where the previous request stopped, so this will have the same performance
characteristics as the former `scan` search type.

==== `fields` parameter

The `fields` parameter used to try to retrieve field values from stored
fields, and fall back to extracting from the `_source` if a field is not
marked as stored.  Now, the `fields` parameter will only return stored fields
-- it will no longer extract values from the `_source`.

==== search-exists API removed

The search exists api has been removed in favour of using the search api with
`size` set to `0` and `terminate_after` set to `1`.


==== Deprecated queries removed

The following deprecated queries have been removed:

`filtered`::      Use `bool` query instead, which supports `filter` clauses too.
`and`::           Use `must` clauses in a `bool` query instead.
`or`::            Use `should` clauses in a `bool` query instead.
`limit`::         Use the `terminate_after` parameter instead.
`fquery`::        Is obsolete after filters and queries have been merged.
`query`::         Is obsolete after filters and queries have been merged.
`query_binary`::  Was undocumented and has been removed.
`filter_binary`:: Was undocumented and has been removed.


==== Changes to queries

* Removed support for the deprecated `min_similarity` parameter in `fuzzy
  query`, in favour of `fuzziness`.

* Removed support for the deprecated `fuzzy_min_sim` parameter in
  `query_string` query, in favour of `fuzziness`.

* Removed support for the deprecated `edit_distance` parameter in completion
  suggester, in favour of `fuzziness`.

* Removed support for the deprecated `filter` and `no_match_filter` fields in `indices` query,
in favour of `query` and `no_match_query`.

* Removed support for the deprecated `filter` fields in `nested` query, in favour of `query`.

* Removed support for the deprecated `minimum_should_match` and
  `disable_coord` in `terms` query, use `bool` query instead. Also removed
  support for the deprecated `execution` parameter.

* Removed support for the top level `filter` element in `function_score` query, replaced by `query`.

* The `collect_payloads` parameter of the `span_near` query has been deprecated.  Payloads will be loaded when needed.

* The `score_type` parameter to the `nested` and `has_child` queries has been
  removed in favour of `score_mode`.  The `score_mode` parameter to `has_parent`
  has been deprecated in favour of the `score` boolean parameter.   Also, the
  `total` score mode has been removed in favour of the `sum` mode.

* When the `max_children` parameter was set to `0` on the `has_child` query
  then there was no upper limit on how many child documents were allowed to
  match. Now, `0` really means that zero child documents are allowed. If no
  upper limit is needed then the `max_children` parameter shouldn't be specified
  at all.

* The `exists` query will now fail if the `_field_names` field is disabled.


==== Top level `filter` parameter

Removed support for the deprecated top level `filter` in the search api,
replaced by `post_filter`.

==== Highlighters

Removed support for multiple highlighter names, the only supported ones are:
`plain`, `fvh` and `postings`.

==== Term vectors API

The term vectors APIs no longer persist unmapped fields in the mappings.

The `dfs` parameter to the term vectors API has been removed completely. Term
vectors don't support distributed document frequencies anymore.

==== Sort

The `reverse` parameter has been removed, in favour of explicitly
specifying the sort order with the `order` option.

==== Inner hits

* The format of top level inner hits has been changed to be more readable. All options are now set on the same level.
  So the `path` and `type` options are specified on the same level where `query` and other options are specified.