SQL 2008:关闭全文搜索查询的停用词

时间:2011-12-08 18:13:27

标签: sql-server-2008 full-text-search stop-words

我很难找到一个好的解决方案:

假设我有一个“公司”表,其中有一个名为“名称”的列。我在这个专栏上有一个全文目录。如果用户搜索“非常好的公司”,我的查询将是:

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

问题在于此示例中,“非常”一词出现在标准的停用词列表中:

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

导致查询返回时没有行,即使有一行名为“Very Good Company”。

我的问题是,如何在我的查询中关闭停用词?或者我将如何完全删除它们?

或者我还有其他方法可以进行此搜索吗?

3 个答案:

答案 0 :(得分:44)

如果其他人偶然发现了这个问题:

看起来在2008年可以选择这样做;这对我来说并不明显,因为数据库从2005年开始升级,我认为这不是一个选择。

您需要做的第一件事是将兼容性级别设置为2008:

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100

然后,当通过向导创建全文索引时,有一个步骤允许您忽略索引的停用词

编辑:以下是执行此操作的脚本:

ALTER FULLTEXT INDEX ON MyTable SET STOPLIST = OFF

答案 1 :(得分:16)

默认情况下,SQL Server中不会忽略停用词。

这是你想要做的:

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO

参考:http://msdn.microsoft.com/en-us/library/ms187914%28v=sql.100%29.aspx

答案 2 :(得分:0)

我今天早些时候在全文搜索时遇到了这个问题。

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

因此,在您的参数中,只需将*附加到您的搜索中并解决问题。