本地英文版地址: ../en/query-dsl-match-bool-prefix-query.html
match_bool_prefix 查询分析它的输入内容,并根据这些词项构造一个 bool 查询。
除最后一个词项外,每个词项都用于 term 查询。
最后一个词项用于 prefix 查询。
match_bool_prefix 查询像这样:
GET /_search
{
"query": {
"match_bool_prefix" : {
"message" : "quick brown f"
}
}
}
其分析后产生的词项quick、brown 和 f 类似于下面的 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_match 和 operator 参数,将设置应用于构造的 bool 查询。
在大多数情况下,构造的 bool 查询中的子句数将是通过分析查询文本产生的词项数。
fuzziness、prefix_length、max_expansions、fuzzy_transpositions 和 fuzzy_rewrite 参数可以应用于除了最后一个词项之外的所有词项构建的 term 子查询。
它们对为最后一个词项构建的 prefix 查询没有任何影响。