У меня возникли проблемы с использованием contains в sql server 2008 и не показывает никаких выходных данных, если в моем тексте есть «for» или «c #»

#sql-server #sql-server-2008

#sql-server #sql-server-2008

Вопрос:

У меня есть таблица с одним из столбцов в качестве event_name, который имеет значение / данные «C # для начинающих» в этом столбце. Я пытаюсь выполнить поиск с использованием ключевого слова contains как:

 select * from events where company_id = 1 and contains(event_name, '"for"')
  

но это ничего не возвращает. Я также пытался запросить как

 select * from events where company_id = 1 and contains(event_name, '"c#"')
  

и это тоже не работает (в выходных данных нет). Но когда я изменяю свой запрос как

 select * from events where company_id = 1 and contains(event_name, '"beginners"')

or
select * from events where company_id = 1 and contains(event_name, '"c#*"'),
  

Это дает мне ожидаемый результат.

Затем я попытался:

 select * from events where company_id = 1 and contains(event_name, '"for*"')
  

но это не работает

Я не понимаю, почему происходит сбой, когда я использую «for» или «c #» в contains.

Что я делаю не так?

Ответ №1:

«for» — это стоп-слово на английском языке, поэтому оно не будет проиндексировано в полнотекстовый индекс. Если вы хотите выполнить поиск записей, содержащих определенную строку, используйте LIKE operator

 select * from events where company_id = 1 and event_name LIKE '%for%'
  

Вы можете просмотреть все стоп-слова для английского языка, выполнив следующий запрос

 SELECT  stopword
FROM    sys.fulltext_system_stopwords ssw
WHERE   language_id = 1033
  

Комментарии:

1. Спасибо! Можете ли вы сказать, почему это приводит к сбою, если я указываю текст как «C #», и не приводит к сбою, когда текст «C # *»?

2. @chaitanya В моем тесте «C #» работает так, как ожидалось. Я не знаю, почему это не работает на твоей стороне.