有人可以向我解释一下must_not和filter之间的区别在于elasticsearch吗?
E.g。在这里(取自elasticsearch definitive guide),为什么还不能用于范围?
{
"bool": {
"must": { "match": { "title": "how to make millions" }},
"must_not": { "match": { "tag": "spam" }},
"should": [
{ "match": { "tag": "starred" }}
],
"filter": {
"range": { "date": { "gte": "2014-01-01" }}
}
}
}
特别关注this documentation,在我看来它们完全相同:
过滤器:子句(查询)必须出现在匹配的文档中。然而,与必须不同的是,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。
must_not :子句(查询)不得出现在匹配的文档中。子句在过滤器上下文中执行,这意味着忽略评分并考虑使用子句进行高速缓存。由于忽略了评分,因此会返回所有文档的0分。
答案 0 :(得分:3)
基本上,filter
= must
但没有得分。
must_not
表示不得满足的条件,而filter
(和must
)表达必须满足的条件才能选择文档。
答案 1 :(得分:1)
当需要在结果中显示匹配的文档时使用过滤器,而当结果中不显示匹配的文档时使用Must_not。进一步分析:
过滤器:
绝不是