Почему полнотекстовое индексирование SQL не возвращает результаты для слов, содержащих #? - PullRequest
20 голосов
/ 04 августа 2008

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

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 04 августа 2008

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

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

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

РЕДАКТИРОВАТЬ: Я также нашел эта информация :

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

1 голос
/ 04 августа 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...