web-dev-qa-db-fra.com

SQL 2008: Désactiver les mots vides pour la recherche de texte intégral

J'ai du mal à trouver une bonne solution à cela:

Disons que j'ai une table de "Société", avec une colonne appelée "Nom". J'ai un catalogue de texte intégral sur cette colonne. Si un utilisateur cherchait "Very Good Company", ma requête serait:

SELECT
    *
FROM
    Company
WHERE
    CONTAINS(Name, '"Very" AND "Good" AND "Company"')

Le problème est dans cet exemple, le mot "Très" apparaît dans la liste standard des mots vides:

SELECT
    ssw.*
FROM
    sys.fulltext_system_stopwords ssw
WHERE
    ssw.language_id = 1033;

Il en résulte un retour de la requête sans lignes, même s'il existe une ligne nommée "Very Good Company".

Ma question est la suivante: comment puis-je désactiver les mots vides pour ma requête? Ou comment pourrais-je les éliminer complètement?

Ou y a-t-il une autre façon de faire cette recherche?

25
John

Si quelqu'un d'autre tombe sur ce problème:

Il semble qu'il existe une option pour le faire en 2008; cela ne m'apparaissait pas clairement car la base de données avait été mise à niveau à partir de 2005 et je ne pensais pas que c'était une option.

La première chose à faire est de définir le niveau de compatibilité jusqu’en 2008:

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

Ensuite, lors de la création de l'index de texte intégral via l'assistant, une étape vous permet d'ignorer les mots vides pour l'index.

edit: Voici le script pour le faire aussi:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
42
John

Par défaut, dans SQL Server, les mots vides ne sont pas ignorés.

Voici ce que vous voulez faire:

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO

REF: http://msdn.Microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

16

J'avais ce problème plus tôt aujourd'hui avec la recherche en texte intégral.

151-663049 - returns result
151-66304 - no result
151-6630 - no result
151-663 - no result
151-66 - no result
151-6 - returns result
151 - returns result
151 returns result

Mais j’ai lu un article qui dit de contourner le problème et d’ajouter un * à la fin de chaque recherche. http://social.msdn.Microsoft.com/Forums/sqlserver/en-US/ fae33a6b-7c7c-4c11-842c-ca5277ed824f/ms-sql-server-2008-r2-fulltext-search-problem

151-663049* - returns result
151-66304* - returns result
151-6630* - returns result
151-663* - returns result
151-66* - returns result
151-6* - returns result
151-* - returns result
151* - returns result

Donc, dans vos paramètres, ajoutez simplement * à vos recherches et aux problèmes résolus.

0
Prescient