Elasticsearch同一查询中must与filter的判定逻辑、优先级及执行顺序问询
Elasticsearch Bool查询中Must与Filter的常见疑问解答
1. 部分文档匹配Must但不匹配Filter时,是否返回空结果?
不会返回空结果。该查询只会返回同时满足Must和Filter所有条件的文档:
- 仅匹配Must但不匹配Filter的文档会被直接过滤,不会出现在结果中;
- 只有当完全没有文档同时满足两类条件时,才会返回空结果。
2. Filter的优先级更高吗?
是的,Filter的优先级更高。原因在于:
- Filter的核心作用是快速缩小待查询的文档范围,它不参与相关性评分的计算;
- Elasticsearch会对Filter的结果进行缓存,后续相同Filter条件的查询可以直接复用缓存结果,大幅提升性能。
3. 查询的执行顺序是怎样的?先执行Must还是Filter?
执行顺序是先执行Filter,再执行Must:
- 首先通过Filter中的
term条件(status:published)筛选出所有状态为“已发布”的文档,得到一个文档子集; - 接着在这个子集内执行Must中的两个
match查询,找出同时匹配title:Search和content:Elasticsearch的文档; - 最后对符合条件的文档计算相关性评分,并返回结果。
内容的提问来源于stack exchange,提问作者barteloma
相关产品推荐
相关产品推荐

