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

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

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

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

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

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

Комментарии к вопросу (1)
Решение

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

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

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

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

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

Комментарии (0)

Цитирую многократно повторенную страницу справки о языке запросов Indexing Service:

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

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

Комментарии (0)