0

Je travaille pour ajouter la recherche à mon application de rails de PostgreSQL 9.1. Voici la configuration:Un index DB est-il possible pour optimiser une méthode pg_search, pg_search_scope?

class Comment < ActiveRecord::Base 
    include PgSearch 
    pg_search_scope :search_by_content, :against => :content 

Rails C, commande:

Comment.where(:commentable_id => 33).search_by_content('pgsql').count 

Rails Log:

(348.1ms) SELECT COUNT(*) FROM "comments" WHERE "comments"."commentable_id" = 33 AND (((to_tsvector('simple', coalesce("comments"."content"::text, ''))) @@ (to_tsquery('simple', ''' ' || 'pgsql' || ' ''')))) 

Après l'installation de la pierre précieuse, et la mise en place du modèle de commentaire, les instructions mentionnées rien à propos de l'ajout d'un index DB pour optimiser les performances. Étant donné que la requête prend déjà 348.1ms localement, je suis curieux que cela puisse être optimisé pour être plus performant?

Merci

+0

Pour ceux d'entre nous qui ne parlent pas Rails, quelles sont les requêtes sous-jacentes de ce 'pg_search'? Est-ce la recherche en texte intégral? Si c'est le cas, lisez le manuel de PostgreSQL sur la recherche en texte intégral, qui traite des index GiST pour le texte intégral. –

+0

La requête qui est exécutée est affichée ci-dessus dans le "Rails Log" qui montre le SQL brut envoyé à PostgreSQL – AnApprentice

+1

Gah, je suis aveugle. Pardon. Alors oui, il utilise la recherche en texte intégral. –

Répondre

2

Rails semble utiliser la recherche en texte intégral - voir le PostgreSQL documentation on full text search, en particulier la section creating indexes.

Rails fait des choses très bizarres avec l'expression tsearch2 qui peut rendre plus difficile la création d'un index que PostgreSQL reconnaîtra comme correspondant. Voir this prior question. Utilisez le EXPLAIN ANALYZE pour vérifier qu'il utilise l'index.

Questions connexes