Почему SQL Full Text Indexing не возвращает результаты для слов, содержащих #?

Например, мой запрос выглядит так: SQL Server 2005:

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

У меня есть полный текстовый индекс, определенный для использования столбца SearchField, который возвращает результаты при использовании:

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

Я считаю, что # - специальное письмо, так как я могу позволить FREETEXT правильно работать для запроса выше?

Ответы

Ответ 1

# char индексируется как пунктуация и поэтому игнорируется, поэтому похоже, что мы удалим букву C из нашего списка индексирования игнорирования слов.

Протестируйте его локально после этого и перестройте индексы, и я получаю результаты!

Глядя на использование другого языка прерывания слов в индексированном столбце, чтобы эти специальные символы не игнорировались.

EDIT: я также нашел эту информацию:

С# индексируется как c (если c не находится в списке ваших шумовых слов, см. больше в списках слов шума позже), но С# индексируется как С# (в SQL 2005 и SQL 2000, запущенных на Win2003, независимо от того, является ли C или c в списке шумовых слов). Это не только С#, который хранится как С#, но и любая заглавная буква, за которой следует #. Напротив, С++ (и любая другая строчная буква с последующим знаком ++) индексируется как c (независимо от того, находится ли c в списке ваших шумовых слов).

Ответ 2

Цитирование многореплицированной страницы справки об языке запросов индексирования:

Чтобы использовать в запросе специально обработанные символы, такие как &, |, ^, #, @, $, (,), заключите свой запрос в кавычки (").

Насколько мне известно, полнотекстовый поиск в MSSQL также выполняется службой индексирования, поэтому это может помочь.