should查询
当我们想要检索一批符合条件的文档,只要文档满足一个条件时就可以返回,这种情况下我们可以使用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。