{
"match": { "title": "brown fox"}
}
How match Uses bool
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:
{
"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 (1)
}
}
-
Because there are only three clauses, the
minimum_should_matchvalue of75%in thematchquery is rounded down to2. At least two out of the threeshouldclauses must match.
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.