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
затем при создании полнотекстового индекса с помощью мастера, есть шаг, который позволяет игнорировать стоп-слова для индекс
edit: вот сценарий, чтобы сделать это:
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
поэтому в вашем параметре просто добавьте * к вашим поискам и решенной проблеме.