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

MS SQL Server Discussion :

Problème résultat CONTAINS


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut Problème résultat CONTAINS
    Bonjour à tous,
    j'ai un petit soucis pour faire une recherche avec CONTAINS. Concrètement je voudrais que ma query me ramène tous les records contenant dans un champ le mot "france".

    Comme dirait Mr SQLPro (dont je recommande fortement les formations !!!) : "Un exemple vaut mieux qu'un long discour"

    Exemple :

    Contenu de la table Table_1

    Id | Libelle1 | Libelle2 |
    _______________________________
    1 | fort de france | NULL |
    2 | NULL | france soir |
    3 | souffrance | NULL |

    Je voudrais que ma query me renvoit 3 records
    Mais elle me renvoit uniquement les 2 premiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,'"*france*"')
    Je n'ai peut être pas bien saisi comment s'utilise CONTAINS ??

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonsoir,

    Peux-tu essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * 
    FROM Table_1 
    WHERE FREETEXT(Libelle1,Libelle2, 'france')
    Et nous dire ce que cela donne ?

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    A mon grand regret, le résultat est le même avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE FREETEXT((Libelle1,Libelle2), 'france')

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Toujours pas de solution ???

  5. #5
    Membre confirmé Avatar de SILO
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE libellé_1 like "%france%" or libellé_1 like "%france%"
    Bonne chance

  6. #6
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    peut-etre en explicitant le nom de tes colonnes au lieu de *
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  7. #7
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    http://msdn2.microsoft.com/en-us/library/ms187787.aspx

    Microsoft semble dire que dans cette syntaxe de contains, c'est un préfixe qu'on donne.

    J'ai la vague sensation que CONTAINS doit plus servir dans les cas où on veut jouer avec de la sémantique que pour faire de la recherche brutale (avec LIKE).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par SILO Voir le message
    essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM Table_1 
    WHERE libellé_1 like "%france%" or libellé_1 like "%france%"
    Bonne chance
    Le but au final est de faire une recherche dans toutes les tables de la db. Une syntaxe avec des LIKE et des OR poserait des problèmes de perfs comparé à l'utilisation du full indexes..
    Merci

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par Fleur-Anne.Blain Voir le message
    peut-etre en explicitant le nom de tes colonnes au lieu de *
    Bonjour,
    j'ai essayé en listant les champs mais cela ne change rien...

  10. #10
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Citation Envoyé par MKITONE Voir le message
    Le but au final est de faire une recherche dans toutes les tables de la db. Une syntaxe avec des LIKE et des OR poserait des problèmes de perfs comparé à l'utilisation du full indexes..
    Merci
    Je pense justement que c'est pour ce genre de raison que tu ne peux pas faire les recherches que tu voudrais... un index en suffixe, c'est assez rare.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Je pense justement que c'est pour ce genre de raison que tu ne peux pas faire les recherches que tu voudrais... un index en suffixe, c'est assez rare.
    Je ne comprends pas.. Ce qui est d'autant plus étrange, c'est que la doc le décris comme utilisable ainsi. De plus, la recherche avec "souf*" renvoit bien ce qu'elle devrait... Alors pourquoi dan sun sens et pas dans l'autre ?? Cela pourrait-il être du à ma version (2008 béta) ??

  12. #12
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Franchement, en regardant la syntaxe, j'ai pas l'impression que *mot* soit prévu...
    Après, s'il faut une raison, je dirais que la notion de préfixe est très proche de la notion d'indexe, alors que celle de suffixe pas du tout.
    Par exemple, te viendrait-il à l'idée de construire un annuaire des noms par mot contenu ?

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
       CONTAINS   ( { column_name | (column_list) | * } 
              , '< contains_search_condition >'     
       [ , LANGUAGE language_term ]
          ) 
    < contains_search_condition > ::= 
        { < simple_term > 
        | < prefix_term > 
        | < generation_term > 
        | < proximity_term > 
        | < weighted_term > 
        } 
        | { ( < contains_search_condition > ) 
        [ { < AND > | < AND NOT > | < OR > } ] 
        < contains_search_condition > [ ...n ] 
        } 
    < simple_term > ::= 
              word | " phrase "
    < prefix term > ::= 
         { "word * " | "phrase *" }
    < generation_term > ::= 
         FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) 
    < proximity_term > ::= 
         { < simple_term > | < prefix_term > } 
         { { NEAR | ~ }
         { < simple_term > | < prefix_term > } 
         } [ ...n ] 
    < weighted_term > ::= 
         ISABOUT 
            ( { { 
      < simple_term > 
      | < prefix_term > 
      | < generation_term > 
      | < proximity_term > 
      } 
       [ WEIGHT ( weight_value ) ] 
       } [ ,...n ] 
            ) 
    < AND > ::= 
         { AND | & }
    < AND NOT > ::= 
         { AND NOT | & !}
    < OR > ::= 
         { OR | | }

  13. #13
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Par défaut
    peux-tu essayer cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,' "*france*" OR "*france" OR "france*" ')

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par ylarvor Voir le message
    peux-tu essayer cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM Table_1 
    WHERE 
    CONTAINS(*,' "*france*" OR "*france" OR "france*" ')
    Cela ne fonctionne pas non plus...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Franchement, en regardant la syntaxe, j'ai pas l'impression que *mot* soit prévu...
    Après, s'il faut une raison, je dirais que la notion de préfixe est très proche de la notion d'indexe, alors que celle de suffixe pas du tout.
    Par exemple, te viendrait-il à l'idée de construire un annuaire des noms par mot contenu ?

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
       CONTAINS   ( { column_name | (column_list) | * } 
              , '< contains_search_condition >'     
       [ , LANGUAGE language_term ]
          ) 
    < contains_search_condition > ::= 
        { < simple_term > 
        | < prefix_term > 
        | < generation_term > 
        | < proximity_term > 
        | < weighted_term > 
        } 
        | { ( < contains_search_condition > ) 
        [ { < AND > | < AND NOT > | < OR > } ] 
        < contains_search_condition > [ ...n ] 
        } 
    < simple_term > ::= 
              word | " phrase "
    < prefix term > ::= 
         { "word * " | "phrase *" }
    < generation_term > ::= 
         FORMSOF ( { INFLECTIONAL | THESAURUS } , < simple_term > [ ,...n ] ) 
    < proximity_term > ::= 
         { < simple_term > | < prefix_term > } 
         { { NEAR | ~ }
         { < simple_term > | < prefix_term > } 
         } [ ...n ] 
    < weighted_term > ::= 
         ISABOUT 
            ( { { 
      < simple_term > 
      | < prefix_term > 
      | < generation_term > 
      | < proximity_term > 
      } 
       [ WEIGHT ( weight_value ) ] 
       } [ ,...n ] 
            ) 
    < AND > ::= 
         { AND | & }
    < AND NOT > ::= 
         { AND NOT | & !}
    < OR > ::= 
         { OR | | }
    Sorry, c'est vrai qu'en relisant la doc, je ne vois pas la notion de suffixe...
    Mais en utilisant des LIKE et des OR, "bonjour les perfs"

Discussions similaires

  1. Problème résultat dans recherche multicritères
    Par MAMANHOU dans le forum IHM
    Réponses: 36
    Dernier message: 12/06/2010, 19h14
  2. Problème redimensionnement container
    Par goddet dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/10/2007, 11h38
  3. Problème avec CONTAINS
    Par The eye dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/08/2007, 11h49
  4. [SQL] Problème résultat checkbox dans requête SQL
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 20
    Dernier message: 02/07/2006, 15h02
  5. [SGBD/JDBC] [JAVA/MS ACCESS] problème résultat requête
    Par mouuaahh dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 04/04/2006, 10h31

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