# 搜索和查询DSL改变

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/breaking_50_search_changes.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/breaking_50_search_changes.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260751](http://www.apache.wiki/pages/viewpage.action?pageId=4260751)

贡献者 : [片刻](/display/~jiangzhonglian) [ApacheCN](/display/~apachecn) [Apache中文网](/display/~apachechina)

## 搜索类型

search_type = count  **removed**
计数搜索类型自2.0.0版起已被弃用，现在已被删除。 为了获得相同的好处，您只需要将size参数的值设置为0。

例如，以下请求：

```
GET /my_index/_search?search_type=count
{
  "aggs": {
    "my_terms": {
       "terms": {
         "field": "foo"
       }
     }
  }
}
```

可替换为：

```
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "my_terms": {
       "terms": {
         "field": "foo"
       }
     }
  }
}
```

search_type = scan  **removed**
扫描搜索类型自2.1.0版以来已弃用，现在已删除。 现在可以通过执行以_doc顺序排列文档的滚动请求来实现此搜索类型的所有好处，例如：

```
GET /my_index/_search?scroll=2m
{
  "sort": [
    "_doc"
  ]
}
```

按 _doc 排序的滚动请求已优化，以便从上一个请求停止的位置更有效地恢复，因此这将具有与前一个扫描搜索类型相同的性能特性。

## 搜索分片限制

在5.0中，Elasticsearch拒绝将查询超过1000个分片副本（初级或副本）的请求。 原因是这样大量的分片使协调节点的工作非常耗费CPU和内存。 组织数据通常是一个更好的主意，因为有较少的较大的分片。 如果您想绕过此限制（不鼓励），可以将 action.search.shard_count.limit 集群设置更新为更大的值。

## fields参数

fields参数已替换为stored_fields。 stored_fields参数将只返回存储的字段 - 它将不再从_source中提取值。

## fielddata_fields参数

fielddata_fields已弃用，请改用参数docvalue_fields。

## search-exists API 已删除

搜索存在api已被删除，有利于使用大小设置为0和terminate_after设置为1的搜索API。

## 已弃用的查询已删除

以下已弃用的查询已删除：

filtered
    使用bool查询，它支持过滤器子句。
and
    请在bool查询中使用must子句。
or
    请在bool查询中使用should子句。
missing
    使用否定的exists查询。 （也从query_string查询中删除_missing_）
limit
    请改用terminate_after参数。
fquery
    在过滤器和查询合并后过时。
query
    在过滤器和查询合并后过时。
query_binary
    未归档，已删除。
filter_binary
    未归档，已删除。

## 查询的变化

*   不支持的查询（例如geo_point字段上的字词查询）现在会失败，而不会返回任何匹配。
*   删除了对数字，日期和IP字段上的模糊查询的支持，而是使用范围查询。
*   删除了对_uid和_id字段的范围和前缀查询的支持。
*   查询未索引的字段现在将失败，而不返回任何匹配。
*   删除了对模糊查询中已弃用的min_similarity参数的支持，有利于模糊性。
*   删除了对query_string查询中已弃用的fuzzy_min_sim参数的支持，有利于模糊性。
*   删除了对完成suggester中已弃用的edit_distance参数的支持，有利于模糊性。
*   删除了对索引查询中已弃用的过滤器和no_match_filter字段的支持，赞成查询和no_match_query。
*   删除了对嵌套查询中已弃用的过滤字段的支持，有利于查询。
*   删除了对已弃用的minimum_should_match和disable_coord在术语查询中的支持，而改为使用bool查询。也删除了对已弃用的执行参数的支持。
*   删除了对function_score查询中的顶级过滤器元素的支持，由查询替换。
*   已不推荐使用span_near查询的collect_payloads参数。有效载荷将在需要时加载。
*   已删除嵌套和has_child查询的score_type参数，有利于score_mode。 has_parent的score_mode参数已弃用，有利于score boolean参数。此外，已经去除了总分数模式，有利于和模式。
*   当has_child查询的max_children参数设置为0时，没有允许匹配的子文档数量的上限。现在，0实际上意味着允许零个子文档。如果不需要上限，那么不应该指定max_children参数。
*   如果禁用_field_names字段，则现有查询将失败。
*   如果cross_fields，phrase或phrase_prefix类型使用模糊性，multi_match查询将失败。此参数未记录，并且在这些类型的multi_match之前默认忽略。
*   不再支持GeoPolygonQuery中的coerce，normalize，ignore_malformed参数。请改用参数validation_method。
*   对GeoDistanceQuery中的coerce，normalize，ignore_malformed参数的不再支持。请改用参数validation_method。
*   不再支持在GeoBoundingBoxQuery中的coerce，normalize，ignore_malformed参数。请改用参数validation_method。
*   不再支持geo_distance_range查询，应该将其替换为geo_distance bucket聚合。

## 顶级过滤器参数

删除了对搜索api中已弃用的顶级过滤器的支持，由post_filter替换。

## 高亮

删除了对多个高亮名称的支持，唯一支持的是：plain，fvh和postings。

## 术语向量API

术语向量API不再保持映射中的未映射字段。

术语向量API的dfs参数已完全删除。词向量不再支持分布式文档频率。

## 分类

reverse参数已被删除，有利于使用order选项明确指定排序顺序。

为了支持validation_method；coerce和ignore_malformed参数已被弃用。

## 内部命中

*   顶级内部匹配语法已删除。内部命中现在只能指定为nested，has_child和has_parent查询的一部分。之前只能使用顶级内部命中的用例现在可以使用查询dsl中定义的内部命中来完成。
*   嵌套查询中的内部命中的源过滤需要完整的字段名称，而不是相对字段名称。现在，这对于在搜索API中的其他位置进行源过滤是一致的。
*   嵌套的内部点击将不再包含_index，_type和_id键。对于嵌套内部命中，这些值总是与根搜索命中的_index，_type和_id键相同。
*   父/子内部匹配现在将不再包含_index键。对于父/子内部命中，_index键始终与父搜索命中相同。

## 查询 Profiler

在对查询查询的响应中，query_type已重命名为type，lucene已重命名为description。这些更改已经完成，所以响应格式更加友好，以支持其他类型的分析在未来。

## 搜索首选项

[搜索首选项](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-preference.html) _only_node已删除。 使用_only_nodes并指定单个节点ID可以实现相同的行为。

[搜索首选项](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-preference.html) _prefer_node已被_prefer_nodes替代。 通过指定单个节点，_prefer_nodes提供与_prefer_node相同的功能，但也支持指定多个节点。

[搜索首选项](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-request-preference.html) _shards接受辅助首选项，例如_primary用于指定指定分片的主副本。 之前用于将参数的_shards部分与辅助首选项分隔开的分隔符为。 但是，这也是查询字符串参数之间可接受的分隔符，这意味着除非; 逃避，从未观察到次要偏好。 该分隔符已更改为| 并且不需要转义。

## 默认相似性

默认相似性已更改为BM25。

## 解释API

fields字段已重命名为stored_fields