---
title: Boolean
---

## Basic Usage

Boolean queries filter documents based on the logical relationships defined by their subqueries, considering:

- Documents that satisfy all `must` conditions.
- Documents that satisfy none of the `must_not` conditions.
- Documents that satisfy at least one condition from either `must` or `should`.

Boolean queries are a powerful way to combine the results of several different queries.

Here's the code wrapped in a CodeGroup with both SQL function and JSON syntax:

<CodeGroup>
```sql Function Syntax
SELECT description, rating, category
FROM mock_items
WHERE id @@@ paradedb.boolean(
    should => ARRAY[
      paradedb.term('description', 'headphones')
    ],
    must => ARRAY[
      paradedb.term('category', 'electronics'),
      paradedb.fuzzy_term('description', 'bluetooht')
    ],
    must_not => ARRAY[
      paradedb.range('rating', int4range(NULL, 2, '()'))
    ]
);
```
```sql JSON Syntax
SELECT description, rating, category
FROM mock_items
WHERE id @@@
'{
    "boolean": {
      "should": [
          {"term": {"field": "description", "value": "headphones"}}
      ],
      "must": [
          {
            "term": {
             "field": "category",
             "value": "electronics"
            }
          },
          {"fuzzy_term": {"field": "description", "value": "bluetooht"}}
      ],
      "must_not": [
        {
          "range": {
            "field": "rating",
            "from": null,
            "to": 2,
            "bounds": "()"
          }
        }
      ]
    }
}'::jsonb;
```
</CodeGroup>

<div className="mt-8" />

<ParamField body="must">
  A query object or an `ARRAY` of query objects as conditions which must be
  matched.
</ParamField>
<ParamField body="must_not">
  A query object or an `ARRAY` of query objects as conditions which must not be
  matched.
</ParamField>
<ParamField body="should">
  A query object or an `ARRAY` of query objects as conditions of which at least
  one must be matched.
</ParamField>

In order for a boolean query to return a result, one of `must` or `should` must be provided.
`must_not` acts as a mask and does not produce a result set.
