布尔前缀匹配(match_bool_prefix)查询

match_bool_prefix 查询分析它的输入内容,并根据这些词项构造一个 bool 查询。 除最后一个词项外,每个词项都用于 term 查询。 最后一个词项用于 prefix 查询。 match_bool_prefix 查询像这样:

GET /_search
{
    "query": {
        "match_bool_prefix" : {
            "message" : "quick brown f"
        }
    }
}

其分析后产生的词项quickbrownf 类似于下面的 bool 查询:

GET /_search
{
    "query": {
        "bool" : {
            "should": [
                { "term": { "message": "quick" }},
                { "term": { "message": "brown" }},
                { "prefix": { "message": "f"}}
            ]
        }
    }
}

match_bool_prefix 查询和 match_phrase_prefix 查询一个重要的区别是:match_phrase_prefix 查询将其词项作为短语进行匹配,而 match_bool_prefix 查询可以在任何位置匹配其词项。 上面的 match_bool_prefix 查询示例可以匹配包含quick brown fox的字段,但也可以匹配 brown fox quick。 它还可以匹配任何位置出现的包含词项quick、词项 brown 及以 f开头的词项的字段。

参数

默认情况下,将使用查询的字段在其映射中定义的分析器去分析match_bool_prefix 查询的输入文本。 可以使用 analyzer 参数配置一个不同的搜索(时使用的)分析器:

GET /_search
{
    "query": {
        "match_bool_prefix" : {
            "message": {
                "query": "quick brown f",
                "analyzer": "keyword"
            }
        }
    }
}

match_bool_prefix 查询支持 match查询 中描述的minimum_should_matchoperator 参数,将设置应用于构造的 bool 查询。 在大多数情况下,构造的 bool 查询中的子句数将是通过分析查询文本产生的词项数。

fuzzinessprefix_lengthmax_expansionsfuzzy_transpositionsfuzzy_rewrite 参数可以应用于除了最后一个词项之外的所有词项构建的 term 子查询。 它们对为最后一个词项构建的 prefix 查询没有任何影响。