Filters and boolean operators
On this page
The following operators, which must be in capital letters, are supported:
OR
: must match any of the combined conditions (disjunction)AND
: must match all the combined conditions (conjunction)NOT
: negates a filter
You can also use parentheses (
and )
for grouping.
For example, if you would like your retrieved products to be either books or ebooks, not written by JK Rowling, your query would look like this:
1
2
3
index.search('', {
filters: '(category:Book OR category:Ebook) AND NOT author:"JK Rowling"'
});
Negate combined filters
You can’t negate a group of filters, only an individual filter. For example, NOT(filter1 OR filter2)
isn’t allowed.
Combine ANDs and ORs
While you may use as many ANDs and ORs as you need, be careful about how you combine them.
For performance reasons, you can’t put groups of ANDs within ORs. For example:
Combination | Allowed? |
---|---|
x AND (y OR z) AND (a OR b) |
Yes |
x AND y OR z AND a OR b |
Yes |
x OR ( y AND z) OR ( a AND b) |
No |
(a AND b) OR (c AND d) |
No |
Your filter might fail if it reduces to an unsupported form. For example:
Original | Reduced (disallowed) form |
---|---|
((a OR b) AND NOT c) AND NOT d |
(a AND NOT c AND NOT d) OR (b AND NOT c AND NOT d) |
Check out the filter syntax validator to help you build complex filter statements.
Missing parentheses
To avoid confusion, use parentheses around logical statements.
If you omit them, the engine will automatically put the ORs inside parenthesis:
Original | Engine’s interpretation |
---|---|
x AND y OR z AND a OR b |
x AND (y OR z) AND (a OR b) |
x OR y AND z OR a AND b |
(x OR y) AND (z OR a) AND b |
Mixed filter types in OR conditions
You can’t compare different filter types (string, numeric, tags) with an OR
.
For example, num=3 OR tag1 OR facet:value
isn’t allowed.