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

поэтому в вашем параметре просто добавьте * к вашим поискам и решенной проблеме.