Anda harus memisahkan array tingkat atas dan memeriksa elemen dari sana:
select distinct id, content
FROM test
JOIN lateral (
select elems
FROM jsonb_array_elements(content) jae(elems)
) all_arrays ON TRUE
WHERE elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
ORDER BY 1;
Adapun cara terbaik untuk melakukan ini, itu sangat bergantung pada data aktual Anda - berapa banyak baris, seberapa besar struktur jsonb ini, dll. Namun, secara umum, pencarian seperti ilike '%3%' akan mendapat manfaat dari indeks berbasis off dari pg_trgm karena mereka tidak dapat menggunakan indeks btree tradisional.
Sunting:Permintaan @Abelisto di komentar lebih baik karena harus lebih berkinerja, terutama jika konten dapat berisi 1000 elemen:
select * from test
where exists
(select 1
from jsonb_array_elements(content) jae(elems)
where elems ->> 0 = 'first 1'
and elems ->> 1 ilike '%3%'
);