有人可以向我解释一下 elasticsearch 中 must_not 和 filter 之间的区别吗?
例如这里(取自elasticsearch 权威指南),为什么 must_not 不也用于范围?
{
"bool": {
"must": { "match": { "title": "how to make millions" }},
"must_not": { "match": { "tag": "spam" }},
"should": [
{ "match": { "tag": "starred" }}
],
"filter": {
"range": { "date": { "gte": "2014-01-01" }}
}
}
}
Run Code Online (Sandbox Code Playgroud)
具体看这个文档,在我看来它们是完全一样的:
filter:子句(查询)必须出现在匹配的文档中。然而,与 must 不同的是,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑缓存子句。
must_not:子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着忽略评分并考虑将子句用于缓存。由于评分被忽略,所有文档的评分为 0。
Sou*_*dra 13
在filter当匹配的文档需要在结果中显示的使用,而must_not在使用时,匹配的文档不会在结果中显示。进一步分析:
筛选:
禁止:
| 归档时间: |
|
| 查看次数: |
5798 次 |
| 最近记录: |