最初の試みは正しいですが、それに依存するには(部分的な)btreeインデックスとビットマップインデックススキャンを使用する必要があります:
create index on product(((ext->'size')::int)) where ((ext->'size') is not null);
質量についても同じです。プランナーがその場で取得できない場合は、2つのwhere句を追加します。つまり、where ext->'size' is not null
質量についても同じです。
ある種のパターンがある場合(おそらく、サイズのあるほとんどの製品にも質量があるため)、2つを組み合わせた複数列のインデックスを作成する可能性があります。1つは袋、もう1つは説明です。
あなたが書いたginインデックスとそれに付随するクエリ(構文エラーあり)は基本的に同じことをしますが、順序はありません。遅くなります。