To wyrażenie:
to_tsvector('simple', (COALESCE(title::TEXT), ''))
nie jest sargable w stosunku do Twojego indeksu.
Powinieneś zadeklarować indeks na dokładnie tym wyrażeniu, które jest użyte w zapytaniu:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', COALESCE(title::TEXT,'')))
(lub niech ruby wygeneruje wyrażenie, które jest używane w indeksie).
Jeśli chcesz indeksować wiele kolumn, po prostu je połącz:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', title || ' ' || product_type || ' ' || platform_id))
ale znowu, Ruby powinien filtrować dokładnie to samo wyrażenie, aby indeks mógł być używany.