关于ES的minimum_should_match

minimum_should_match用于控制bool中should列表,至少匹配几个条件才召回doc。

默认不传minimum_should_match的情况下,查询分2个情况:

  • 当bool处在query上下文中时,如果must或者filter匹配了doc,那么should即便一条都不满足也可以召回doc。
  • 当bool处在父bool的filter上下文中时 或者 bool处在query上下文且没有must/filter子句的时候,should至少匹配1个才能召回doc。

所以,如果需要类似这种查询:where a=1 and (b=2 or c=3),就有2种做法:

走嵌套bool,让should进入filter上下文:

走单bool,query上下文,需要显式指定minimum_should_match=1:

其实作为一个可扩展的查询接口,一般来说嵌套bool表达力更丰富,扩展性更好,所以不建议用第二种方式开发业务。

 

 

发表评论

电子邮件地址不会被公开。