SQL 2008: отключить стоп-слова для запроса полнотекстового поиска
У меня возникли сложности с поиском хорошего решения для этого:
Допустим, у меня есть таблица "Компания" с колонкой "Имя". У меня есть полнотекстовый каталог на эту колонку. Если бы пользователь искал "Очень хорошая компания", мой запрос был бы:
SELECT
*
FROM
Company
WHERE
CONTAINS(Name, '"Very" AND "Good" AND "Company"')
Проблема в этом примере, слово "Очень" отображается в стандартном списке стоп-слов:
SELECT
ssw.*
FROM
sys.fulltext_system_stopwords ssw
WHERE
ssw.language_id = 1033;
В результате запрос возвращается без строк, хотя есть строка с именем "Очень хорошая компания".
У меня вопрос: как мне отключить стоп-слова для моего запроса? Или как мне их полностью удалить?
Или есть другой способ, которым я должен идти об этом поиске?
3 ответа
В случае, если кто-то еще сталкивается с этой проблемой:
Похоже, что есть возможность сделать это в 2008 году; это не было очевидно для меня, потому что база данных была обновлена с 2005 года, где я не верю, что это был вариант.
Первое, что вам нужно сделать, это установить уровень совместимости до 2008 года:
ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100
Затем, при создании полнотекстового индекса с помощью мастера, есть шаг, который позволяет игнорировать стоп-слова для индекса
редактировать: вот скрипт, чтобы сделать это:
ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
По умолчанию в SQL Server стоп-слова не игнорируются.
Это то, что вы хотите сделать:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO
REF: http://msdn.microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx
У меня была эта проблема ранее сегодня с полнотекстовым поиском.
151-663049 - returns result
151-66304 - no result
151-6630 - no result
151-663 - no result
151-66 - no result
151-6 - returns result
151 - returns result
151 returns result
Но я прочитал пост, в котором говорится, чтобы обойти проблему и добавить * в конце каждого поиска. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/fae33a6b-7c7c-4c11-842c-ca5277ed824f/ms-sql-server-2008-r2-fulltext-search-problem
151-663049* - returns result
151-66304* - returns result
151-6630* - returns result
151-663* - returns result
151-66* - returns result
151-6* - returns result
151-* - returns result
151* - returns result
Так что по вашему параметру просто добавьте * к своим поискам и проблема решена.