Compound queries let you search using many rules at once. This helps find exactly what you want by mixing conditions.
Why compound queries combine conditions in Elasticsearch
{
"bool": {
"must": [ { "condition1" }, { "condition2" } ],
"should": [ { "condition3" } ],
"must_not": [ { "condition4" } ],
"filter": [ { "condition5" } ]
}
}The bool query is the main way to combine conditions.
must means all these conditions must match.
should means one or more of these should match.
must_not excludes matches.
filter applies conditions without affecting score.
{
"bool": {
"must": [
{ "match": { "title": "apple" } },
{ "range": { "price": { "gte": 10 } } }
]
}
}{
"bool": {
"should": [
{ "term": { "color": "red" } },
{ "term": { "color": "blue" } }
],
"minimum_should_match": 1
}
}{
"bool": {
"must": [ { "match": { "category": "fruit" } } ],
"must_not": [ { "term": { "status": "sold_out" } } ]
}
}This query finds items described as fresh, priced 20 or less, not expired, and prefers those with a discount.
{
"query": {
"bool": {
"must": [
{ "match": { "description": "fresh" } },
{ "range": { "price": { "lte": 20 } } }
],
"must_not": [
{ "term": { "status": "expired" } }
],
"should": [
{ "term": { "discount": true } }
],
"minimum_should_match": 0
}
}
}Compound queries help you mix many search rules easily.
Use filter for conditions that don't affect scoring but speed up search.
Remember to set minimum_should_match when using should clauses to control how many should match.
Compound queries combine multiple conditions to make searches precise.
The bool query is the main tool to combine must, should, must_not, and filter clauses.
Using compound queries helps find exactly what you want by mixing rules.
Practice
Solution
Step 1: Understand the role of compound queries
Compound queries allow combining several conditions to refine search results.Step 2: Identify the main benefit
Combining conditions helps find exactly what you want by mixing rules.Final Answer:
To combine multiple conditions for more precise search results -> Option AQuick Check:
Compound queries = combine conditions [OK]
- Thinking compound queries speed up indexing
- Confusing compound queries with index creation
- Believing compound queries delete documents
Solution
Step 1: Recall the correct bool query syntax
The bool query uses keys like must, should, must_not, and filter inside a bool object.Step 2: Match the syntax with options
{"bool": {"must": [{"match": {"field": "value"}}]}} correctly uses "bool" with "must" and a match clause.Final Answer:
{"bool": {"must": [{"match": {"field": "value"}}]}} -> Option AQuick Check:
Bool query uses must inside bool [OK]
- Using 'combine' instead of 'bool'
- Placing conditions outside bool
- Wrong nesting of match inside combine
{"bool": {"must": [{"match": {"title": "apple"}}], "must_not": [{"match": {"status": "sold"}}]}}Solution
Step 1: Analyze the must clause
The must clause requires the title field to match 'apple'.Step 2: Analyze the must_not clause
The must_not clause excludes documents where status matches 'sold'.Final Answer:
Documents with title containing 'apple' and status not 'sold' -> Option BQuick Check:
Must + must_not = include and exclude [OK]
- Confusing must_not as must
- Thinking must_not includes documents
- Mixing OR logic instead of AND
{"bool": {"must": {"match": {"name": "john"}}, "should": [{"term": {"age": 30}}]}}Solution
Step 1: Check the structure of must clause
The must clause expects an array of conditions, but here it is a single object.Step 2: Verify should clause usage
The should clause is correctly an array, so no error there.Final Answer:
"must" should be an array, not a single object -> Option CQuick Check:
Must requires array of conditions [OK]
- Using object instead of array for must
- Thinking should can't be with must
- Misplacing match inside must
Solution
Step 1: Identify the required conditions
Must have category = books, should have author = Alice or year = 2020, and must_not have status = archived.Step 2: Match conditions to bool clauses
Category is mandatory (must), author or year is optional but at least one (should), and status excluded (must_not).Final Answer:
{"bool": {"must": [{"term": {"category": "books"}}], "should": [{"term": {"author": "Alice"}}, {"term": {"year": 2020}}], "must_not": [{"term": {"status": "archived"}}]}} -> Option DQuick Check:
Must + should + must_not combined correctly [OK]
- Putting author in must instead of should
- Using filter instead of must for category
- Putting all conditions in should
Ready to prove it?
Pass the test and this pattern moves unknown
