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

Requêtes PostgreSQL Discussion :

Requête full text : organisation de champs


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut Requête full text : organisation de champs
    Bonjour,

    Ma question concerne la recherche full text sur une table contenant des données sur des livres.
    Je dois faire deux types de recherche :

    1. la 1ère sur les champs titre, auteur, ean, isbn, editeur.

    J'ai donc mis en place le champ vector_data qui reprend tout ces champs. Une recherche de ce type sur la table dont le nombre de lignes est d'environ 2400000, prend à peu près 1 seconde.
    -> ici c'est ok tout fonctionne

    2. la 2ème recherche doit s'effectuer sur les mêmes champs mais certains peuvent ne pas être renseignés. Si je cherche un auteur, la recherche ne doit pas se faire dans le champ titre, etc...

    -> Cette partie n'est pas encor een place, d’où ma question : de quelle manière dois-je organiser ma table ? Dois-je créer les champs vector_auteur TSVECTOR, vector_titre TSVECTOR, etc... ?
    Si oui est-ce une bonne idée de les laisser dans la même table ?

    Merci de vos conseils et n'hésitez pas à me dire si je n'ai pas été assez clair :-)

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Le champ combiné tsvector est justement la réponse à #2. Il suffit qu'un mot soit présent, peu importe qu'il vienne du titre ou de l'auteur ou d'un autre champs.

    Il faudrait peut-être montrer quelques exemples de requêtes pour étayer la question.

    Si "le champ n'est pas renseigné" ne veut pas dire "dans la base il n'est pas renseigné" mais "dans le formulaire de recherche il n'est pas renseigné" alors oui il faut du tsvector par champ, mais peut-être que les trigrammes seraient plus adaptés. Voir l'extension pg_trgm.

    Les trigrammes permettent des requêtes du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select colonnes FROM livre WHERE auteur like '%blabla%'
    avec utilisation d'index, et aussi des recherches bruitées.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 197
    Points : 121
    Points
    121
    Par défaut
    Oui, c'est plutôt le champ de formulaire qui peut ne pas être renseigné donc si je ne renseigne que l'auteur, je n'ai pas trop envie qu'il me sorte des lignes qui n'ont rien à voir avec l'auteur recherché.
    Je me répond un peu en même temps :
    J'ai testé avec du LIKE pour une recherche sur un auteur, j’attends toujours le résultat de postgresql :-)
    J'ai ensuite testé en FTS en ayant créé une table à part avec un champ ftp_auteur, le tout lié à la table article. temps de réponse < 1 seconde

    Ce que je souhaite savoir c'est surtout si il est plus intéressant de séparer les champs pour la recherche FTS dans une table externe, plutôt que d'alourdir la table dans laquelle se trouve les données sources.

Discussions similaires

  1. Requête FULL-TEXT inversée
    Par pyrotech dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/02/2011, 22h58
  2. Erreur sur champ text pour un index Full-Text
    Par Steph82 dans le forum Outils
    Réponses: 5
    Dernier message: 06/01/2011, 14h08
  3. Index full text sur champs multiples
    Par manu_71 dans le forum Outils
    Réponses: 6
    Dernier message: 22/02/2007, 00h41
  4. Réponses: 3
    Dernier message: 16/12/2006, 12h59
  5. Réponses: 2
    Dernier message: 19/10/2005, 10h34

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