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

StackOverflow https://stackoverflow.com/questions/1042

Вопрос

Например, мой запрос выглядит следующим образом с использованием 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 это также выполняется Службой индексации, так что это может помочь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top