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;
Результат в возвращаемом запросе без строк, хотя есть строка с названием "Очень хорошая компания".
Мой вопрос в том, как бы я хотел бы отключить стоп-слова для моего запроса? Или как я могу их полностью удалить?
Или есть другой способ, которым я должен заниматься этим поиском?
Ответы
Ответ 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
Таким образом, в вашем параметре просто добавьте * к вашим поисковым запросам и проблеме.