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

Développement SQL Server Discussion :

[MSSQL 2k8 R2] Full Text stoplist


Sujet :

Développement SQL Server

  1. #1
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut [MSSQL 2k8 R2] Full Text stoplist
    Bonjour à tous,

    Je m'en remet à votre expertise car j'ai beau chercher, je n'arrive pas à trouver de solution à ce problème.

    Voici le contexte :

    Je développe une application qui a pour objectif de permettre la recherche de mots-clefs (en rapport avec l'informatique) dans des CV (format HTML / Word(x) / PDF).

    Pour ce faire, j'utilise SQL Server 2008 R2 et les recherches FULL TEXT.

    Tout fonctionne très bien pour des recherches classiques (exemple : "C# AND VB.NET"), mais un problème apparaît lorsque l'utilisateur souhaite rechercher la lettre "C" (en rapport avec le langage de développement C).

    Comme C est reconnu en tant que "noise word", la recherche retourne 0 résultats. J'en veux pour preuve que c'est un "noise word" le résultat de la requête suivante (ligne 126) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT TOP 1000 [stopword] ,[language_id]
      FROM [DB_PRODUCTION_SI].[sys].[fulltext_system_stopwords]
      WHERE language_id = 1036
    J'ai essayé de supprimer le mot "C" de la liste des stopwords mais impossible, j'ai une erreur "Msg*259, Niveau*16, État*1, Ligne*1 - Les mises à jour appropriées des catalogues du système ne sont pas autorisées."

    J'ai aussi tenté de ruser en utilisant le Thesaurus, mais je ne vois pas par quoi remplacer ou étendre la recherche sur le mot "C".

    Avez-vous une quelconque idée de la méthode à employer pour résoudre ce problème ?

    En vous remerciant par avance pour vos solutions et/ou vos pistes de réflexion.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    Salut

    Comment as-tu créés ta stoplist ? (FROM SYSTEM ou pas ?). Si tu as créés ta stoplist à partir de zéro, cela ne devrait pas poser de prolblème.

    Sinon regarde du côté de la table .

    La table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sys.fulltext_system_stopwords
    contient les stopwords de SQL Server 2008 par défaut. Tu essaies de modifier une table système.

    La personnalisation se fait par base, dans la table
    Emmanuel T.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Il faut créer une liste de mots noirs personnalisés.
    Voici un exemple complet d'utilisation d'une liste perso de mots noirs (extrait de mon cours "SQL server 2008, développer avec des objets LOB" que je donne à Orsys :
    http://www.orsys.fr/formation-sql-se...-objet-LOB.asp

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    -- 12 - manipulation de listes de mots noirs spécifiques
    --======================================================
     
    -- liste des mots noirs par défaut en français
    SELECT * 
    FROM   sys.fulltext_system_stopwords
    WHERE  language_id = 1036;
     
    -- 12.1 - création d'une lite de mots noirs spécifique
    CREATE FULLTEXT STOPLIST FTS_CRASH;
     
    -- 12.2 - ajout de mots à la liste des mots noirs
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'le' LANGUAGE 1036; -- LCID du français dans la table sys.fulltext_languages
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'la' LANGUAGE 1036;
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'les' LANGUAGE 1036;
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'un' LANGUAGE 1036;
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'une' LANGUAGE 1036;
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'des' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'de' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'je' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tu' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'il' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'elle' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'nous' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'vous' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ils' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'elles' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'mais' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ou' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'est' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'donc' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'or' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ni' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'car' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ma' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'mes' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'mon' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ta' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tes' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ton' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'sa' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ses' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'son' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ces' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'qui' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'que' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quoi' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quand' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quant' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'dont' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'en' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'pas' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ne' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'se' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ce' LANGUAGE 1036;  
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'on' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'chacun' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tous' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tout' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'toutes' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'toute' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'mien' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'miens' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tien' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'tiens' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'sien' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'siens' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'nôtre' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'nôtres' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'vôtres' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'leur' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'leurs' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'celui' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ceux' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ceci' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'cela' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ça' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'chaque' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'aucun' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'autre' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'autres' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'alors' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'pendant' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'cependant' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'certains' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'plusieurs' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quelques' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quelque' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quelqu' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quel' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quelle' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quels' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'quelles' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'qu' LANGUAGE 1036; 
    ALTER FULLTEXT STOPLIST FTS_CRASH ADD 'ratiboiser' LANGUAGE 1036; 
     
    -- ajout de tous les mots français d'une seule lettre de la liste par défaut à la nouvelle liste 
    DECLARE @SQL VARCHAR(max);
    SET @SQL = '';
    SELECT @SQL = @SQL + 'ALTER FULLTEXT STOPLIST FTS_CRASH ADD ''' + stopword + ''' LANGUAGE 1036;'
    FROM   sys.fulltext_system_stopwords
    WHERE  language_id = 1036
      AND  LEN(stopword) = 1;
    EXEC (@SQL); 
     
    -- ajout de tous les mots français de deux lettres de la liste par défaut à la nouvelle liste s'il n'y sont pas déjà
    DECLARE @SQL VARCHAR(max);
    SET @SQL = '';
    SELECT @SQL = @SQL + 'ALTER FULLTEXT STOPLIST FTS_CRASH ADD ''' + stopword + ''' LANGUAGE 1036;'
    FROM   sys.fulltext_system_stopwords
    WHERE  language_id = 1036
      AND  LEN(stopword) = 2
      AND  stopword NOT IN (SELECT stopword COLLATE French_BIN
                            FROM   sys.fulltext_stoplists AS FTL
                                   INNER JOIN sys.fulltext_stopwords FTW
                                         ON FTL.stoplist_id = FTW.stoplist_id 
                            WHERE  name = 'FTS_CRASH'
                              AND  LEN(stopword) = 2) ;
    EXEC (@SQL);
     
    -- 12.3 - suppression d'un mots noirs de la liste
    ALTER FULLTEXT STOPLIST FTS_CRASH DROP 'ratiboiser' LANGUAGE 1036; 
     
    -- 12.4 - suppression de tous les mots noirs d'une langue de la liste
    ALTER FULLTEXT STOPLIST FTS_CRASH DROP ALL LANGUAGE 1031; 
     
    -- 12.5 - changement de la liste des mots noirs d'un index....
    ALTER FULLTEXT INDEX ON dbo.T_CRASH_CRH 
       SET STOPLIST FTS_CRASH; 
     
    -- 12.6 - vidage de la liste des mots noirs
    ALTER FULLTEXT STOPLIST FTS_CRASH DROP ALL;

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    @kagemaru et @SQLpro

    Merci pour vos réponses ! Effectivement je n'avais pas créé de Stoplist personnalisée donc le problème doit venir de là.

    Maintenant que j'en ai créé une perso (à l'aide des codes fournis par SQLpro) et que je l'ai associée à mon index ça fonctionne très bien !

    Merci beaucoup !!!
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

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

Discussions similaires

  1. MSSQL 2000 - Full text catalog et accent insensitive
    Par Orgied dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/03/2017, 16h44
  2. probleme avec une requete full text
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2005, 17h20
  3. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  4. Recherche FULL Text existe que dans MySql ?
    Par seb.49 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 01/06/2004, 22h30

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