Сведения о вопросе

nikolya

16:03, 1st July, 2020

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

Просмотров: 465   Ответов: 2

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

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

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

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

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



  Сведения об ответе

lats

18:03, 1st July, 2020

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

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

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

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

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


  Сведения об ответе

prince

18:03, 1st July, 2020

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться