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