Transact SQL CONTIENT ne pas renvoyer de correspondance pour des strings identiques avec un caractère générique

Je rencontre un problème sur SQL Server 2008r2 où l'utilisation de la fonction CONTAINS ne returnne pas une correspondance pour des strings complètement identiques. Je suis presque sûr d'avoir mal compris quelque chose à propos de CONTAINS.

J'ai configuré le scénario de test suivant pour le répliquer.

CREATE TABLE texttest ( loldex INT PRIMARY KEY IDENTITY, testcolumn NVARCHAR(255) ) GO INSERT INTO texttest VALUES('2ND ACADEMY OF NATURAL SCIENCES') GO CREATE UNIQUE INDEX ui_loldex ON [texttest](loldex); CREATE FULLTEXT INDEX ON [texttest]([testcolumn]) KEY INDEX ui_loldex CREATE FULLTEXT CATALOG ft AS DEFAULT; GO 

Ensuite, je lance la requête suivante:

 SELECT [testcolumn] FROM [texttest] WHERE CONTAINS(testcolumn, '"2ND ACADEMY OF NATURAL SCIENCES*"') 

Et ça ne returnne rien.

Cependant, si je cours:

 SELECT [testcolumn] FROM [texttest] WHERE CONTAINS(testcolumn, '"2ND ACADEMY*"') 

Il renvoie la ligne.

Si j'utilise un peu plus de caractères dans la string après le Y avec le caractère générique, je n'ai rien.

Si je supprime le caractère générique, j'obtiens la ligne de la string identique. Cependant, j'ai essayé le joker avec d'autres cordes et ça a bien fonctionné. D'après ce que je comprends, le caractère générique représente 0 ou plusieurs caractères supplémentaires, donc je ne comprends pas pourquoi cela ne fonctionne pas dans ce cas.

Une idée de ce qui me manque ici?

C'est à cause of mot de bruit et il ne sélectionnera pas les résultats si vous effectuez une search par stopwords . Vous pouvez voir tous les mots d'arrêt:

 select ssw.stopword, slg.name from sys.fulltext_system_stopwords ssw join sys.fulltext_languages slg on slg.lcid = ssw.language_id where slg.name = 'English' 

Vous pouvez l'éteindre pour votre table:

 ALTER FULLTEXT INDEX ON [texttest] SET STOPLIST = OFF 

Vous pouvez gérer les stoplists et les stopwords : https://technet.microsoft.com/fr-fr/library/ms142551(v=sql.110).aspx

Par exemple:

 stopword name must English my English never English no English now English of English on English only English or English other English our English out English over English re English 

Utilisez la fonction freetext pour searchr une phrase entière dans votre cas:

 SELECT [testcolumn] FROM [texttest] WHERE freetext(testcolumn,'"2ND ACADEMY OF NATURAL SCIENCES*"') 

Sortie:

 testcolumn 2ND ACADEMY OF NATURAL SCIENCES