Documentation Index
Fetch the complete documentation index at: https://upstash.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Boolean operators combine multiple conditions to build complex queries.
They control how individual field conditions are logically combined to determine which documents match.
Available Operators
| Operator | Description |
|---|
$must | All conditions must match |
$should | At least one condition should match, or acts as a score booster when combined with $must |
$mustNot | Excludes documents matching any condition |
$boost | Adjusts the score contribution of a boolean clause |
How Boolean Operators Work Together
Boolean operators can be combined in a single query to express complex logic.
The operators work together as follows:
$must defines the required conditions. Documents must match ALL of these.
$should adds optional conditions:
- When used alone: documents must match at least one condition
- When combined with
$must: conditions become optional score boosters
$mustNot filters out unwanted documents from the result set.
Combining Operators
Here’s an example that uses all three operators together:
TypeScript
Python
Redis CLI
// Find in-stock electronics, preferring wireless products, excluding budget items
await products.query({
filter: {
$must: {
category: "electronics",
inStock: true,
},
$should: [
{ name: "wireless" },
{ description: "bluetooth" },
],
$mustNot: {
description: "budget",
},
},
});
# Find in-stock electronics, preferring wireless products, excluding budget items
products.query(filter={
"$must": {"category": "electronics", "inStock": True},
"$should": [{"name": "wireless"}, {"description": "bluetooth"}],
"$mustNot": {"description": "budget"},
})
# Find in-stock electronics, preferring wireless products, excluding budget items
SEARCH.QUERY products '{"$must": {"category": "electronics", "inStock": true}, "$should": [{"name": "wireless"}, {"description": "bluetooth"}], "$mustNot": {"description": "budget"}}'
This query:
- Requires documents to be in the “electronics” category AND in stock
- Boosts documents that mention “wireless” or “bluetooth” (but doesn’t require them)
- Excludes any documents containing “budget” in the description
Nesting Boolean Operators
Boolean operators can be nested to create more complex logic:
TypeScript
Python
Redis CLI
// Find products that are either (premium electronics) OR (discounted sports items)
await products.query({
filter: {
$should: [
{
$must: {
category: "electronics",
description: "premium",
},
},
{
$must: {
category: "sports",
price: { $lt: 50 },
},
},
],
},
});
# Find products that are either (premium electronics) OR (discounted sports items)
products.query(filter={
"$should": [
{"$must": {"category": "electronics", "description": "premium"}},
{"$must": {"category": "sports", "price": {"$lt": 50}}},
],
})
# Find products that are either (premium electronics) OR (discounted sports items)
SEARCH.QUERY products '{"$should": [{"$must": {"category": "electronics", "description": "premium"}}, {"$must": {"category": "sports", "price": {"$lt": 50}}}]}'