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

Translate

Par exemple, ma requête est la suivante en utilisant SQL Server 2005:

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

J'ai un index de texte intégral défini pour utiliser la colonne SearchField qui renvoie les 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?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Le caractère # est indexé comme ponctuation et donc ignoré, il semble donc que nous supprimerons la lettre C de nos listes d'ignorance d'indexation de mots.

Je l'ai testé localement après avoir fait cela et reconstruit les index et j'obtiens des résultats!

Vous cherchez à utiliser une autre langue de séparation de mots sur la colonne indexée, afin que ces caractères spéciaux ne soient pas ignorés

EDIT: j'ai aussi trouvécette information:

c # est indexé en tant que c (si c n'est pas dans votre liste de mots parasites, en savoir plus sur les listes de mots parasites plus tard), mais C # est indexé en tant que C # (dans SQL 2005 et SQL 2000 fonctionnant sous Win2003, que C ou c soit dans votre bruit liste de mots). Ce n'est pas seulement C # qui est stocké en C #, mais toute lettre majuscule suivie de #. Inversement, c ++ (et toute autre lettre minuscule suivie d'un ++) est indexé comme c (indépendamment du fait que c soit dans votre liste de mots parasites).

La source
Translate

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

Pour utiliser des caractères spécialement traités tels que &, |, ^, #, @, $, (,), dans une requête, placez votre requête entre guillemets (“).

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

La source