- should查询
- 限制should条件满足的个数
- 什么场景下会使用minimum_should_match
当我们想要检索一批符合条件的文档,只要文档满足一个条件时就可以返回,这种情况下我们可以使用should查询,实现类似OR的功能。示例代码如下:
{ "from": 0, "size": 10, "query": { "bool": { "should": [ { "match": { "table_name": { "query": "student_info" } } }, { "match": { "table_comment": { "query": "学生信息" } } } ] } } }
上述代码实现了table_name字段匹配"student_info" 或者 table_comment字段匹配"学生信息"的文档搜索。
限制should条件满足的个数当我们的条件增多时,我们想要提取满足2个或满足更多个条件的文档,此时我们可以用minimum_should_match字段实现。示例代码如下:
{ "from": 0, "size": 10, "query": { "bool": { "should": [ { "match": { "table_name": { "query": "student_info" } } }, { "match": { "table_comment": { "query": "学生信息" } } }, { "match": { "field_name": { "query": "student_name" } } } ], "minimum_should_match": 2 } } }
上述代码实现了至少满足两个条件的文档搜索。
minimum_should_match字段必须和should字段一同使用,否则返回无结果
什么场景下会使用minimum_should_match当我们的一个bool查询中包含filter、must、should时,should的过滤条件可以不满足。此时should的含义是一个文档不必包含should中指定的条件,但如果一旦包含,我们就认为他们更相关。而当bool查询中不包含filter、must时,should的过滤条件必须至少有一个匹配。示例代码如下:
{ "from": 0, "size": 10, "query": { "bool": { "filter": [ { "term": { "is_enable": 1 } } ], "must": [ { "match": { "school_name": { "query": "default" } } } ], "should": [ { "query_string": { "default_field": "table_name", "query": "student_info", "boost": 4 } }, { "query_string": { "default_field": "field_name", "query": "student_name", "boost": 2 } } ], "minimum_should_match": 1 } } }
当bool查询中包含filter或must时,should语句不会影响最终结果的条数,但是会影响文档的最终排名。此时,如果需要限定should中的过滤条件必须满足一个,可以显示的指定minimum_should_match。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)