The BM25 index accepts arrays of type text[] or varchar[].
Copy
Ask AI
CREATE TABLE array_demo (id SERIAL PRIMARY KEY, categories TEXT[]);INSERT INTO array_demo (categories) VALUES ('{"food","groceries and produce"}'), ('{"electronics","computers"}'), ('{"books","fiction","mystery"}');CREATE INDEX ON array_demo USING bm25 (id, categories)WITH (key_field = 'id');
Under the hood, each element in the array is indexed as a separate entry. This means that an array is considered a
match if any of its entries is a match.
Copy
Ask AI
SELECT * FROM array_demo WHERE categories === 'food';
Expected Response
Copy
Ask AI
id | categories----+-------------------------------- 1 | {food,"groceries and produce"}(1 row)
Text arrays can be tokenized and filtered in the same way as text fields:
Copy
Ask AI
CREATE INDEX ON array_demo USING bm25 (id, (categories::pdb.literal))WITH (key_field = 'id');