ElasticSearch控制should查询的精度(匹配个数)

ElasticSearch控制should查询的精度(匹配个数),第1张

ElasticSearch控制should查询的精度(匹配个数)

文章目录
    • should查询
    • 限制should条件满足的个数
    • 什么场景下会使用minimum_should_match

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。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5681664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存