Added cautionary note to match_phrase_prefix explaining its shortcomings
Closes #17655
This commit is contained in:
parent
370af45c09
commit
e4df68b627
|
@ -5,7 +5,7 @@
|
||||||
:major-version: 5.x
|
:major-version: 5.x
|
||||||
:branch: master
|
:branch: master
|
||||||
:jdk: 1.8.0_73
|
:jdk: 1.8.0_73
|
||||||
:defguide: https://www.elastic.co/guide/en/elasticsearch/guide/current
|
:defguide: https://www.elastic.co/guide/en/elasticsearch/guide/master
|
||||||
:plugins: https://www.elastic.co/guide/en/elasticsearch/plugins/master
|
:plugins: https://www.elastic.co/guide/en/elasticsearch/plugins/master
|
||||||
:javaclient: https://www.elastic.co/guide/en/elasticsearch/client/java-api/master/
|
:javaclient: https://www.elastic.co/guide/en/elasticsearch/client/java-api/master/
|
||||||
:issue: https://github.com/elastic/elasticsearch/issues/
|
:issue: https://github.com/elastic/elasticsearch/issues/
|
||||||
|
|
|
@ -8,25 +8,49 @@ allows for prefix matches on the last term in the text. For example:
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
{
|
{
|
||||||
"match_phrase_prefix" : {
|
"match_phrase_prefix" : {
|
||||||
"message" : "this is a test"
|
"message" : "quick brown f"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
It accepts the same parameters as the phrase type. In addition, it also
|
It accepts the same parameters as the phrase type. In addition, it also
|
||||||
accepts a `max_expansions` parameter that can control to how many
|
accepts a `max_expansions` parameter (default `50`) that can control to how
|
||||||
prefixes the last term will be expanded. It is highly recommended to set
|
many prefixes 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.
|
it to an acceptable value to control the execution time of the query. For
|
||||||
For example:
|
example:
|
||||||
|
|
||||||
[source,js]
|
[source,js]
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
{
|
{
|
||||||
"match_phrase_prefix" : {
|
"match_phrase_prefix" : {
|
||||||
"message" : {
|
"message" : {
|
||||||
"query" : "this is a test",
|
"query" : "quick brown f",
|
||||||
"max_expansions" : 10
|
"max_expansions" : 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
|
||||||
|
[IMPORTANT]
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
The `match_phrase_prefix` query is a poor-man's autocomplete. It is very easy
|
||||||
|
to use, which let's you get started quickly with _search-as-you-type_ but it's
|
||||||
|
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
|
||||||
|
phase `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
|
||||||
|
<<search-suggesters-completion,completion suggester>> and
|
||||||
|
{guide}/_index_time_search_as_you_type.html[Index-Time Search-as-You-Type].
|
||||||
|
|
||||||
|
===================================================
|
Loading…
Reference in New Issue