How to Use Should in Bool Query in Elasticsearch
In Elasticsearch, use the
should clause inside a bool query to specify optional conditions that increase the relevance score if matched. Documents matching more should clauses score higher, but if no must clauses exist, at least one should clause must match for the document to be included.Syntax
The should clause is part of the bool query and contains an array of queries. Each query inside should is optional but boosts the document's score if matched.
Key parts:
bool: Combines multiple query clauses.should: List of optional queries.minimum_should_match(optional): Number ofshouldclauses that must match.
json
{
"query": {
"bool": {
"should": [
{ "match": { "field1": "value1" } },
{ "match": { "field2": "value2" } }
],
"minimum_should_match": 1
}
}
}Example
This example searches for documents where either title contains "Elasticsearch" or content contains "search". Documents matching both score higher.
json
{
"query": {
"bool": {
"should": [
{ "match": { "title": "Elasticsearch" } },
{ "match": { "content": "search" } }
],
"minimum_should_match": 1
}
}
}Output
{
"hits": {
"total": { "value": 3, "relation": "eq" },
"hits": [
{ "_score": 1.5, "_source": { "title": "Elasticsearch Basics", "content": "Learn search" } },
{ "_score": 1.2, "_source": { "title": "Advanced Search", "content": "Elasticsearch tips" } },
{ "_score": 0.8, "_source": { "title": "Search Engines", "content": "Introduction" } }
]
}
}
Common Pitfalls
Common mistakes when using should include:
- Not setting
minimum_should_matchwhen nomustclauses exist, causing unexpected results. - Expecting
shouldclauses to filter documents strictly; they only influence scoring unlessminimum_should_matchis set. - Using
shouldwithmustclauses without understanding thatshouldclauses become optional.
json
{
"query": {
"bool": {
"should": [
{ "match": { "field": "value1" } },
{ "match": { "field": "value2" } }
]
/* Missing minimum_should_match, no must clause */
}
}
}
/* Correct usage with minimum_should_match */
{
"query": {
"bool": {
"should": [
{ "match": { "field": "value1" } },
{ "match": { "field": "value2" } }
],
"minimum_should_match": 1
}
}
}Quick Reference
Summary tips for using should in bool queries:
- Use
shouldto add optional conditions that boost relevance. - Set
minimum_should_matchwhen nomustclauses exist to require matches. - Combine with
mustfor mandatory conditions plus optional boosts. - Remember
shouldclauses alone do not filter unlessminimum_should_matchis set.
Key Takeaways
Use
should inside bool queries to add optional matching conditions that increase score.If no
must clauses exist, set minimum_should_match to require at least one should match.should clauses alone do not filter results; they only affect scoring unless minimum_should_match is used.Combine
should with must to mix required and optional conditions.Avoid forgetting
minimum_should_match when using only should clauses to prevent unexpected results.