Подтвердить что ты не робот

SQL 2008: отключить стоп-слова для полного поиска текста

У меня довольно сложно найти хорошее решение для этого:

Скажем, у меня есть таблица "Компания" с колонкой "Имя". В этом столбце есть полнотекстовый каталог. Если пользователь искал "Very Good Company", мой запрос:

SELECT
    *
FROM
    Company
WHERE
    CONTAINS(Name, '"Very" AND "Good" AND "Company"')

Проблема в этом примере: в стандартном списке стоп-слов отображается слово "Очень":

SELECT
    ssw.*
FROM
    sys.fulltext_system_stopwords ssw
WHERE
    ssw.language_id = 1033;

Результат в возвращаемом запросе без строк, хотя есть строка с названием "Очень хорошая компания".

Мой вопрос в том, как бы я хотел бы отключить стоп-слова для моего запроса? Или как я могу их полностью удалить?

Или есть другой способ, которым я должен заниматься этим поиском?

4b9b3361

Ответ 1

Если кто-то еще наткнется на эту проблему:

Похоже, есть возможность сделать это в 2008 году; это было не очевидно для меня, потому что база данных была обновлена ​​с 2005 года, где я не считаю, что это вариант.

Первое, что вам нужно сделать, - установить уровень совместимости до 2008 года:

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

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

edit: Здесь script, чтобы сделать это:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF

Ответ 2

По умолчанию в 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

Ответ 3

У меня была эта проблема сегодня сегодня с полным текстовым поиском.

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

Таким образом, в вашем параметре просто добавьте * к вашим поисковым запросам и проблеме.