搜索和查询DSL改变

搜索类型

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。这些更改已经完成,所以响应格式更加友好,以支持其他类型的分析在未来。

搜索首选项

搜索首选项 _only_node已删除。 使用_only_nodes并指定单个节点ID可以实现相同的行为。

搜索首选项 _prefer_node已被_prefer_nodes替代。 通过指定单个节点,_prefer_nodes提供与_prefer_node相同的功能,但也支持指定多个节点。

搜索首选项 _shards接受辅助首选项,例如_primary用于指定指定分片的主副本。 之前用于将参数的_shards部分与辅助首选项分隔开的分隔符为。 但是,这也是查询字符串参数之间可接受的分隔符,这意味着除非; 逃避,从未观察到次要偏好。 该分隔符已更改为| 并且不需要转义。

默认相似性

默认相似性已更改为BM25。

解释API

fields字段已重命名为stored_fields