WARNING: The 2.x versions of Elasticsearch have passed their EOL dates. If you are running a 2.x version, we strongly advise you to upgrade.
This documentation is no longer maintained and may be removed. For the latest information, see the current Elasticsearch documentation.
How match Uses booledit
By now, you have probably realized that multiword match
queries simply wrap the generated term
queries in a bool
query. With the
default or
operator, each term
query is added as a should
clause, so
at least one clause must match. These two queries are equivalent:
{ "match": { "title": "brown fox"} }
{ "bool": { "should": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }} ] } }
With the and
operator, all the term
queries are added as must
clauses,
so all clauses must match. These two queries are equivalent:
{ "match": { "title": { "query": "brown fox", "operator": "and" } } }
{ "bool": { "must": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }} ] } }
And if the minimum_should_match
parameter is specified, it is passed
directly through to the bool
query, making these two queries equivalent:
{ "match": { "title": { "query": "quick brown fox", "minimum_should_match": "75%" } } }
{ "bool": { "should": [ { "term": { "title": "brown" }}, { "term": { "title": "fox" }}, { "term": { "title": "quick" }} ], "minimum_should_match": 2 } }
Because there are only three clauses, the |
Of course, we would normally write these types of queries by using the match
query, but understanding how the match
query works internally lets you take
control of the process when you need to. Some things can’t be
done with a single match
query, such as give more weight to some query terms
than to others. We will look at an example of this in the next section.