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 bool
editHow match Uses bool
editBy 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.