Added cautionary note to match_phrase_prefix explaining its shortcomings

Closes #17655
This commit is contained in:
Clinton Gormley 2016-04-22 12:45:12 +02:00
parent 370af45c09
commit e4df68b627
2 changed files with 31 additions and 7 deletions

View File

@ -5,7 +5,7 @@
:major-version: 5.x
:branch: master
: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
:javaclient: https://www.elastic.co/guide/en/elasticsearch/client/java-api/master/
:issue: https://github.com/elastic/elasticsearch/issues/

View File

@ -8,25 +8,49 @@ allows for prefix matches on the last term in the text. For example:
--------------------------------------------------
{
"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
accepts a `max_expansions` parameter that can control to how 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.
For example:
accepts a `max_expansions` parameter (default `50`) that can control to how
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. For
example:
[source,js]
--------------------------------------------------
{
"match_phrase_prefix" : {
"message" : {
"query" : "this is a test",
"query" : "quick brown f",
"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].
===================================================