A match_bool_prefix query analyzes its input and constructs a
bool query from the terms. Each term except the last
is used in a term query. The last term is used in a prefix query. A
match_bool_prefix query such as
GET /_search
{
"query": {
"match_bool_prefix" : {
"message" : "quick brown f"
}
}
}
where analysis produces the terms quick, brown, and f is similar to the
following bool query
GET /_search
{
"query": {
"bool" : {
"should": [
{ "term": { "message": "quick" }},
{ "term": { "message": "brown" }},
{ "prefix": { "message": "f"}}
]
}
}
}
An important difference between the match_bool_prefix query and
match_phrase_prefix is that the
match_phrase_prefix query matches its terms as a phrase, but the
match_bool_prefix query can match its terms in any position. The example
match_bool_prefix query above could match a field containing
quick brown fox, but it could also match brown fox quick. It could also
match a field containing the term quick, the term brown and a term
starting with f, appearing in any position.
By default, match_bool_prefix queries' input text will be analyzed using the
analyzer from the queried field’s mapping. A different search analyzer can be
configured with the analyzer parameter
GET /_search
{
"query": {
"match_bool_prefix": {
"message": {
"query": "quick brown f",
"analyzer": "keyword"
}
}
}
}
match_bool_prefix queries support the
minimum_should_match and operator
parameters as described for the
match query, applying the setting to the
constructed bool query. The number of clauses in the constructed bool
query will in most cases be the number of terms produced by analysis of the
query text.
The fuzziness, prefix_length,
max_expansions, fuzzy_transpositions, and fuzzy_rewrite parameters can
be applied to the term subqueries constructed for all terms but the final
term. They do not have any effect on the prefix query constructed for the
final term.