ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 搜索和查询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