Match phrase prefix query
Match phrase prefix query
Returns documents that contain the words of a provided text, in the same order as provided. The last term of the provided text is treated as a prefix, matching any words that begin with that term.
Example request
The following search returns documents that contain phrases beginning with quick brown f
in the message
field.
This search would match a message
value of quick brown fox
or two quick brown ferrets
but not the fox is quick and brown
.
resp = client.search(
query={
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
},
)
print(resp)
response = client.search(
body: {
query: {
match_phrase_prefix: {
message: {
query: 'quick brown f'
}
}
}
}
)
puts response
const response = await client.search({
query: {
match_phrase_prefix: {
message: {
query: "quick brown f",
},
},
},
});
console.log(response);
GET /_search
{
"query": {
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
}
}
Top-level parameters for match_phrase_prefix
<field>
(Required, object) Field you wish to search.
Parameters for <field>
query
(Required, string) Text you wish to find in the provided <field>
.
The match_phrase_prefix
query analyzes any provided text into tokens before performing a search. The last term of this text is treated as a prefix, matching any words that begin with that term.
analyzer
(Optional, string) Analyzer used to convert text in the query
value into tokens. Defaults to the index-time analyzer mapped for the <field>
. If no analyzer is mapped, the index’s default analyzer is used.
max_expansions
(Optional, integer) Maximum number of terms to which the last provided term of the query
value will expand. Defaults to 50
.
slop
(Optional, integer) Maximum number of positions allowed between matching tokens. Defaults to 0
. Transposed terms have a slop of 2
.
zero_terms_query
(Optional, string) Indicates whether no documents are returned if the analyzer
removes all tokens, such as when using a stop
filter. Valid values are:
none
(Default)No documents are returned if the
analyzer
removes all tokens.all
Returns all documents, similar to a match_all query.
Notes
Using the match phrase prefix query for search autocompletion
While easy to set up, using the match_phrase_prefix
query for search autocompletion can sometimes produce confusing results.
For example, 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 the search_as_you_type field type.