PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Index de texte intégral approprié Rails/PostgreSQL/pg_search

Cette expression :

to_tsvector('simple', (COALESCE(title::TEXT), ''))

n'est pas sargable par rapport à votre index.

Vous devez déclarer l'index sur exactement l'expression utilisée dans la requête :

CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', COALESCE(title::TEXT,'')))

(ou faites en sorte que ruby ​​génère l'expression qui est utilisée dans l'index).

Si vous souhaitez que plusieurs colonnes soient indexées, il vous suffit de les concaténer :

CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', title || ' ' || product_type || ' ' || platform_id))

mais encore une fois, Ruby devrait filtrer exactement la même expression pour que l'index soit utile.