The match_phrase_prefix
is the same as match_phrase
, except that it
allows for prefix matches on the last term in the text. For example:
GET /_search { "query": { "match_phrase_prefix" : { "message" : "quick brown f" } } }
It accepts the same parameters as the phrase type. In addition, it also
accepts a max_expansions
parameter (default 50
) that can control to how
many suffixes the last term will be expanded. It is highly recommended to set
it to an acceptable value to control the execution time of the query. For
example:
GET /_search { "query": { "match_phrase_prefix" : { "message" : { "query" : "quick brown f", "max_expansions" : 10 } } } }
The match_phrase_prefix
query is a poor-man’s autocomplete. It is very easy
to use, which lets you get started quickly with search-as-you-type but its
results, which usually are good enough, can sometimes be confusing.
Consider the query string quick brown f
. This query works by creating a
phrase query out of quick
and brown
(i.e. the term quick
must exist and
must be followed by the term brown
). Then it looks at the sorted term
dictionary to find the first 50 terms that begin with f
, and
adds these terms to the phrase query.
The problem is that the first 50 terms may not include the term fox
so the
phrase quick brown fox
will not be found. This usually isn’t a problem as
the user will continue to type more letters until the word they are looking
for appears.
For better solutions for search-as-you-type see the completion suggester and Index-Time Search-as-You-Type.