SQL 2008: отключить стоп-слова для запроса полнотекстового поиска - PullRequest
26 голосов
/ 08 декабря 2011

У меня возникли сложности с поиском подходящего решения для этого:

Допустим, у меня есть таблица «Компания» со столбцом «Имя».У меня есть полнотекстовый каталог на эту колонку.Если бы пользователь искал «Очень хорошая компания», мой запрос был бы:

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 ]

45 голосов
/ 08 декабря 2011

На случай, если кто-то еще наткнется на эту проблему:

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

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

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

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

edit: Вот скрипт для этого:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF
16 голосов
/ 04 мая 2012

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

0 голосов
/ 16 сентября 2013

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

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

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

...