3.4.6 Query DSL changes

来源:互联网 发布:办公软件应用基础教程 编辑:程序博客网 时间:2024/06/05 02:31

Queries and filters merged
查询和过滤器已合并 - 所有过滤器子句现在都是查询子句。相反,查询子句现在可以在查询上下文或过滤器上下文中使用:

Query context
在查询上下文中使用的查询将计算相关性分数并且不做缓存处理。每当过滤器上下文不适用时,使用查询上下文。

Filter context
在过滤器上下文中使用的查询将不计算相关性分数,并且可以被缓存。过滤器上下文由以下引入:
• constant_score查询
• 在bool查询中的must_not和(新添加的)filter parameter(过滤器参数)
• filter和filters参数在function_score查询中
• 任何称为过滤器的API中,如post_filter搜索参数,或aggregations或index aliases

terms query and filter
现在不推荐使用term filter 的execution选项,如果使用了,将会被忽略。类似地,term query不再支持minimum_should_match参数。
or and and now implemented via bool
之前的or和and过滤器具有与bool过滤器不同的执行模式。
这个区别已经被删除:bool查询现在非常智能,足以处理这两种情况(译者注:or和and)。由于这种变化,or和and过滤器现在是语法糖,它们执行内部作为bool查询。这些过滤器可能在将来会删除。
filtered query and query filter deprecated
query filter已被弃用 - 所有查询都可以在query或filter上下文中使用。
filtered query在现在支持的bool查询中已弃用。nstead of the following:

GET _search{  "query": {    "filtered": { 1      "query": {        "match": {          "text": "quick brown fox"        }      },      "filter": { 2        "term": {          "status": "published"        }      }    }  }}

将query和filter移动到bool查询中的must和filter参数:

GET _search{  "query": {    "bool": { 1      "must": { 2        "match": {          "text": "quick brown fox"        }      },      "filter": { 3        "term": {          "status": "published"        }      }    }  }}

Filter auto-caching(过滤器的自动缓存)
以前可以使用 _cache选项控制哪些过滤器需要缓存,并提供自定义_cache_key。这些选项已弃用,但如果存在,将被忽略掉。
现在在过滤器上下文中使用有意义的查询子句时会自动缓存。该算法考虑了使用频率、查询执行的代价和构建过滤器的代价。
term过滤器的查找机制不再缓存包含term的文档的值。它依赖于文件系统缓存。如果查找索引不太大,建议通过设置index.auto_expand_replicas:0-all来将其复制到所有节点,以便也消除网络开销。
Numeric queries use IDF for scoring(数字查询使用IDF进行评分)
以前,数字字段上的术语查询被有意的阻止使用通常的Lucene评分逻辑,并且这种行为是未被记录的(undocumented ),并且在某些情况下是意想不到的。
numeric (数字)字段的single term查询现在与string字段采用相同的评分方式,使用IDF和norms(如果已启用)。
要查询没有评分的数字字段,应在过滤器上下文中使用查询子句,例如,在bool查询的filter参数中,或者包装在一个constant_score查询中:

GET _search{  "query": {    "bool": {      "must": [        {          "match": { ①            "numeric_tag": 5          }        }      ],      "filter": [        {          "match": { ②            "count": 5          }        }      ]    }  }}

① 该子句在相关性得分计算中将包括IDF。
② 该字句对相关性得分计算没有影响。

Fuzziness and fuzzy-like-this
模糊匹配用于计算每个模糊选择方案的分数,意味着罕见的拼写错误会比常见的正确拼写具有更高的分数。现在,模糊匹配混合了所有模糊选择方案的得分,以使用IDF。
不能再使用百分比指定模糊性,而应使用数字:

  • 0,1,2
  • AUTO(根据项的长度选择0,1或2)

fuzzy_like_this和fuzzy_like_this_field查询使用了代价很大的模糊匹配方法,并且已被删除。
More Like This
More Like This(mlt)API和more_like_this_field(mlt_field)查询已被删除,有利于more_like_this查询。
_terms_to_match 参数已被删除,现在支持minimum_should_match.
limit filter deprecated
limit 过滤器已弃用,并成为无操作。
您可以使用terminate_after参数实现类似的行为。
Java plugins registering custom queries
Java插件注册自定义查询可以通过使用IndicesQueriesModule#addQuery(Class

0 0