Pourquoi l'indexation de texte intégral SQL ne renvoie-t-elle pas les résultats pour les mots contenant #?

Par exemple, ma requête est similaire à SQL Server 2005:

SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#') 

J'ai un index de texte complet défini pour utiliser la colonne SearchField qui renvoie des résultats lors de l'utilisation:

SELECT * FROM Table WHERE SearchField LIKE '%c#%'

Je crois que # est une lettre spéciale, alors comment autoriser FREETEXT à fonctionner correctement pour la requête ci-dessus?

0
Juste une supposition, mais que diriez-vous "c \\ #"?
ajouté l'auteur Ryan Fox, source

2 Réponses

Citant une page d'aide très répliquée sur le langage de requête du service d'indexation:

To use specially treated characters such as &, |, ^, #, @, $, (, ), in a query, enclose your query in quotation marks (?).

Pour autant que je sache, la recherche en texte intégral dans MSSQL est également effectuée par le service d'indexation, cela peut donc aider.

0
ajouté

Le caractère # est indexé en tant que signe de ponctuation et donc ignoré, il semblerait donc que nous supprimions la lettre C de notre liste d'index ignorant les listes.

Testé localement après avoir fait cela et reconstruire les index et j'obtiens des résultats!

En regardant l'utilisation d'un langage de disjoncteur de mots différent sur la colonne indexée, de sorte que ces caractères spéciaux ne sont pas ignorés.

EDIT: J'ai également trouvé cette information :

C# est indexé en tant que c (si c n'est pas dans votre liste de mots parasites, voir plus loin sur les listes de mots parasites), mais C# est indexé en C# (SQL 2005 et SQL 2000 s'exécutant sur Win2003). dans votre liste de mots de bruit). Ce n'est pas seulement C# qui est stocké en C#, mais n'importe quelle lettre majuscule suivie de #. Réciproquement, c ++ (et toute autre lettre en minuscule suivie d'un ++) est indexé comme c (que c soit ou non dans votre liste de mots parasites).

0
ajouté