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