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 "plein texte"


Sujet :

Requêtes PostgreSQL

  1. #1
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut Requête "plein texte"
    Bonjour,


    Je souhaite savoir s'il est possible d'avoir un unique terme pour chercher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    texte
    texte1
    texte2
    ...
    texteN
    Cette requête ne convient pas :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE ts_champ @@ to_tsquery('english','texte');

    Je suis obligé de faire ceci
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM matable WHERE ts_champ @@ to_tsquery('english','texte | texte1 | texte2 | ... | texteN');


    Cela s'avère fastidieux... Y a-t-il mieux tout en restant "optimisable" ?


    par avance
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    une piste parmis d'autre : http://www.postgresql.org/docs/9.3/s...ystrmatch.html

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par punkoff Voir le message
    J'avais aussi vu pg_trim avec <-> et %

    Sympa effectivement, mais cela ne s'applique pas nativement sur un ts_vector.

    Mais en fait, je suis plus vers ce modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    to_tsquery('english','mot1 & mot2? & (texte | texte1 | ... | texteN)')
    Du coup, ça pourrait donner quelque chose comme cela :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    WITH x AS (
    	SELECT unnest(string_to_array(trim(strip(to_tsvector('english','my super text1 is not like text2 but word is not exact'))::text,''''),''' ''')) AS val
    ), y AS (
    	SELECT unnest('{text,word,miss}'::text[]) AS term
    ), tbl AS (
    	SELECT term,min(val<->term)
    		FROM x,y
    		WHERE val%term AND term IN ( SELECT unnest('{text,word,miss}'::text[]) )
    		GROUP BY term
    )
    SELECT *,
    	(count(1) OVER ())>=(WITH c AS (
    		SELECT unnest('{text,word,miss}'::text[])
    	) SELECT count(1) FROM c
    	)-1 AS result 
    	FROM tbl
    ;


    Les résultats seraient :
    • result pour savoir si le test a échoué
    • term pour connaître les termes a priori reconnus
    • min permettant de savoir si la proximité de chaque terme reconnu



    Quid: que peut-on indexer pour que ce soit performant ?
    en gros, j'ai environ 80 mots par val et 4M lignes à traiter (une fois les autres filtres not textuels franchis)
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

Discussions similaires

  1. [Requête/SQL]Pb de "quote" avec un type memo
    Par Tintou dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 26/04/2007, 15h47
  2. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

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