过滤器会做一个判断: 是否应该将文档添加到结果集? 然而查询会做更精细的判断. 他们不仅决定一个文档是否要添加到结果集,而且还要计算文档的相关性(relevant).
像过滤器一样, 布尔查询接受多个用must
, must_not
, and should
的查询子句. 例:
在前面的查询中,凡是满足title
字段中包含quick
,但是不包含lazy
的文档都会在查询结果中。到目前为止,布尔查询的作用非常类似于布尔过滤的作用。
<1> 文档3的得分更高,是因为它同时包含了brown
和 dog
。
得分计算
布尔查询通过把所有符合must
和 should
的子句得分加起来,然后除以must
和 should
子句的总数为每个文档计算相关性得分。
must_not
子句并不影响得分;他们存在的意义是排除已经被包含的文档。
精度控制
像我们控制match
查询的精度一样,我们也可以通过minimum_should_match
参数控制多少should
子句需要被匹配,这个参数可以是正整数,也可以是百分比。
<1> 这也可以用百分比表示
结果集仅包含title
字段中有"brown"
和 "fox"
, , 或 "fox" 和 "dog"
的文档。如果一个文档包含上述三个条件,那么它的相关性就会比其他仅包含三者中的两个条件的文档要高。