当谈到“性能差异”时,我到目前为止还没有读到任何可靠的东西。
基于其官方文档,在bool 查询中使用过滤器
子句(查询)必须出现在匹配的文档中。但是与必须不同,查询的分数将被忽略。过滤器子句在过滤器上下文中执行,这意味着忽略评分并考虑缓存子句。
至于恒分查询
过滤器查询不计算相关性分数。为了提高性能,Elasticsearch 会自动缓存常用的过滤器查询。
只是猜测
常量查询不会计算(TF-IDF或更高级的algs),而bool查询会计算但返回0(忽略它);所以常量查询的性能更高。
此外,当涉及到指定分数时,您必须使用常量分数查询而不是只会返回 0 的布尔查询。
我刚读到的 QA:Elasticsearch : constant_score query vs bool.filter query