We are working on updating this book for the latest version. Some content might be out of date.
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.