Skip to content

Filter Reference

Filter expressions in WHERE clauses for QUERY, SCROLL, UPDATE, and DELETE statements.


WHERE field = 'value' -- equality
WHERE field != 'value' -- inequality
WHERE field > 10 -- greater than
WHERE field >= 10 -- greater than or equal
WHERE field < 100 -- less than
WHERE field <= 100 -- less than or equal
WHERE field = 3.14 -- float equality
WHERE field = true -- boolean equality

WHERE field BETWEEN 10 AND 100
WHERE year BETWEEN 2020 AND 2026
WHERE score BETWEEN 0.5 AND 1.0

WHERE status IN ('active', 'pending', 'reviewed')
WHERE status NOT IN ('deleted', 'archived')
WHERE priority IN ('high', 'medium')
WHERE year IN (2024, 2025, 2026)

WHERE field IS NULL
WHERE field IS NOT NULL
WHERE field IS EMPTY
WHERE field IS NOT EMPTY

WHERE content MATCH 'hello world' -- full-text match
WHERE content MATCH ANY 'hello world' -- match any term
WHERE content MATCH PHRASE 'hello world' -- exact phrase match

WHERE a = 1 AND b = 2
WHERE a = 1 OR b = 2
WHERE NOT a = 1
WHERE (a = 1 OR b = 2) AND c = 3
WHERE (team = 'search' OR team = 'infra') AND severity >= 3
  1. Comparison operators, BETWEEN, IN, IS, MATCH
  2. NOT
  3. AND
  4. OR

Parentheses override precedence.


WHERE meta.source = 'pubmed'
WHERE doc.author.name = 'Alice'

-- Filter by status and year
QUERY 'search' FROM docs LIMIT 10 WHERE status = 'published' AND year >= 2024
-- Filter with set membership
QUERY 'retrieval' FROM docs LIMIT 10 WHERE category IN ('ml', 'nlp', 'cv')
-- Filter with range
QUERY 'articles' FROM docs LIMIT 10 WHERE score BETWEEN 0.8 AND 1.0
-- Filter with text matching
QUERY 'search' FROM docs LIMIT 10 WHERE title MATCH PHRASE 'vector database'
-- Complex filter
QUERY 'emergency' FROM docs LIMIT 10
WHERE (specialty = 'neurology' OR specialty = 'cardiology')
AND priority = 'high'
AND status != 'discharged'
-- Null check
QUERY 'records' FROM docs LIMIT 10 WHERE diagnosis IS NOT NULL
-- Filter in SCROLL
SCROLL FROM docs WHERE topic = 'search' AND year >= 2024 LIMIT 20
-- Filter in DELETE
DELETE FROM docs WHERE status = 'archived'
-- Filter in UPDATE
UPDATE docs SET PAYLOAD = {'status': 'reviewed'} WHERE status = 'pending'

Filters can be applied to individual CTE prefetches:

WITH
dense AS (QUERY 'search' USING dense LIMIT 200),
sparse AS (QUERY 'search' USING sparse LIMIT 300)
QUERY 'search' FROM docs LIMIT 10
PREFETCH (
dense WHERE category = 'tech' SCORE THRESHOLD 0.6,
sparse WHERE priority = 'high' SCORE THRESHOLD 0.3
)
FUSION RRF

For efficient filtering, create payload indexes:

CREATE INDEX ON docs FOR status TYPE keyword
CREATE INDEX ON docs FOR year TYPE integer
CREATE INDEX ON docs FOR score TYPE float
CREATE INDEX ON docs FOR tags TYPE keyword WITH (is_tenant = true)
CREATE INDEX ON docs FOR content TYPE text WITH (tokenizer = 'word', lowercase = true)

TypeUse For
keywordString fields, enums, tags
integerInteger fields
floatFloat fields
boolBoolean fields
uuidUUID string fields
datetimeISO 8601 datetime fields
geo{lat, lon} geo coordinate fields
textFull-text search fields
CREATE INDEX ON docs FOR content TYPE text WITH (
tokenizer = 'word', -- 'word', 'whitespace', 'prefix', 'multilingual'
min_token_len = 2,
max_token_len = 20,
lowercase = true,
ascii_folding = true,
phrase_matching = true,
stopwords = ['en']
)
CREATE INDEX ON docs FOR tenant_id TYPE keyword WITH (
is_tenant = true, -- tenant-aware HNSW partitioning
on_disk = true, -- store index on disk
enable_hnsw = false -- disable HNSW for this field
)