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