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

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

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

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

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

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

4.08.2008 05:51:56
Просто предположение, но как насчет "c \\ #"?
Ryan Fox 4.08.2008 06:04:41
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

14
4.08.2008 07:06:45

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

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

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

1
7.02.2013 13:16:49