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

Например, при использовании SQL Server 2005 мой запрос выглядит следующим образом:

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

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

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

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

Ответов (2)

Решение

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

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

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

РЕДАКТИРОВАТЬ: Я также нашел эту информацию :

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

Цитата из широко распространенной справочной страницы о языке запросов службы индексирования:

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

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