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?
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
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
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.