Например, мой запрос выглядит следующим образом с использованием SQL Server 2005:
SELECT * FROM Table WHERE FREETEXT(SearchField, 'c#')
У меня есть полнотекстовый индекс, определенный для использования столбца SearchField, который возвращает результаты при использовании:
SELECT * FROM Table WHERE SearchField LIKE '%c#%'
Я считаю, что # - это специальная буква, поэтому как мне разрешить FREETEXT работать правильно для запроса выше?
Символ # индексируется как знак препинания и поэтому игнорируется, поэтому, похоже, мы удалим букву C из наших списков игнорирования индексации слов.
Протестировал локально после этого и восстановления индексов и получил результаты!
Рассматриваю возможность использования другого языка разбиения слов в индексируемом столбце, чтобы эти специальные символы не игнорировались.
EDIT: Я также нашел эту информацию:
c# индексируется как c (если c нет в вашем списке шумовых слов, см. подробнее о списках шумовых слов позже), но C# индексируется как C# (в SQL 2005 и SQL 2000, работающих на Win2003, независимо от того, C или c есть в вашем списке шумовых слов). Не только C# хранится как C#, но и любая заглавная буква, за которой следует #. И наоборот, c++ ( и любая другая строчная буква, за которой следует ++) индексируется как c (независимо от того, есть ли c в вашем списке шумовых слов).
Цитирую многократно повторенную страницу справки о языке запросов Indexing Service:
Чтобы использовать в запросе специально обработанные символы, такие как &, |, ^, #, @, $, (, ), заключите запрос в кавычки ("").
Насколько я знаю, полнотекстовый поиск в MSSQL
также выполняется службой индексирования, так что это может помочь.