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

Например, мой запрос похож на следующий с помощью SQL Server 2005:

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

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

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

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

2 ответа

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

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

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

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

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

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

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

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