IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

[Optimisation] recherche text


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 23
    Par défaut [Optimisation] recherche text
    Bonjour tout le monde,

    Voilà, je chercher à faire de l'auto-complétion via une appli web sur une table comprenant approximativement 6.5 millions d'enregistrements. Le problème est que quand je fais un requête de type LIKE ma requête mais de nombreuses secondes à s'exécuter pour environ 50ms pour une requête de type equal.

    J'ai créé un indexe de type btree sur le champ en question mais ça n'améliore quasiment pas les performances. Pour information, ma base est une base PostgreSQL 8.3.

    Donc la question est : Comment puis-je modéliser ou optimiser ma table pour avoir des performances correctes pour une auto-complétion ?

    Sinon, j'ai vu qu'il existait TSearch2 mais ne connaissant pas je ne suis pas certain que ça réponde à mon problème.

    Merci d'avance.
    Julien

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    J'ai aussi rencontré ce soucis. Par défaut un index Postgres ne peut être utilisé avec LIKE : il faut lui ajouter la valeur "varchar_pattern_ops" pour le paramètre "operator class".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX index_name ON tablename(fieldname varchar_pattern_ops);
    Bien sûr l'index ne pourra être utilisé que pour les requêtes où l'on donne le début du mot : LIKE 'debut%'.

    Pour plus d'infos cf la doc.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 23
    Par défaut
    Merci.

    Effectivement, j'avais raté ça.

    Sinon après quelques essais avec TSearch2 j'ai aussi de très bonnes performances.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Citation Envoyé par Jedy Voir le message
    Merci.

    Effectivement, j'avais raté ça.

    Sinon après quelques essais avec TSearch2 j'ai aussi de très bonnes performances.

    Pour info, tu peux nous donner ta solution avec TSearch2 STP ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 23
    Par défaut
    Oui, désolé.

    En 8.3 c'est directement inclus dans la distribution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE INDEX geonames_idx ON geonames.geonames USING gin(to_tsvector('english', full_name));
     
    SELECT full_name
    FROM geonames.geonames
    WHERE to_tsvector('english', full_name) @@ to_tsquery('english', 'paris');
    Le résultat n'est pas identique à celui d'un like mais dans mon contexte ça répond mieux à la problématique car il y a une analyse lexicale. Il est aussi possible d'utiliser un dictionnaire français.

    Deux liens intéressants à ce propos :
    http://www.epplug.org/spip/spip.php?article90
    http://www.sai.msu.su/~megera/postgr...-V2-intro.html

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Super, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2007, 14h46
  2. Recherche texte dans une page ?
    Par Kenshin86 dans le forum IE
    Réponses: 6
    Dernier message: 29/04/2007, 00h55
  3. [Recherche texte sur gros volume de données]
    Par tesla dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 21/02/2007, 13h43
  4. [win32] Recherche texte dans fichier
    Par raphael_kindt dans le forum Windows
    Réponses: 1
    Dernier message: 26/07/2006, 12h51
  5. Recherche texte dans txt
    Par Guillaume602 dans le forum Windows
    Réponses: 3
    Dernier message: 21/12/2005, 00h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo