Upaya awal Anda benar, tetapi Anda perlu menggunakan indeks btree (sebagian) dan pemindaian indeks bitmap untuk mengandalkannya:
create index on product(((ext->'size')::int)) where ((ext->'size') is not null);
Hal yang sama untuk massa, dan jika perencana tidak mendapatkannya di tempat tambahkan dua klausa where, yaitu where ext->'size' is not null
dan sama untuk massa.
Jika ada pola tertentu (yang kemungkinan besar, karena sebagian besar produk dengan ukuran juga memiliki massa), berpotensi membuat indeks multikolom yang menggabungkan dua - satu kantung, deskripsi lainnya.
Indeks gin saat Anda menulisnya, bersama dengan kueri yang menyertainya (dengan kesalahan sintaksis) pada dasarnya akan melakukan hal yang sama tetapi tidak berurutan; akan lebih lambat.