Sql server 2008 SQL 2008:关闭全文搜索查询的停止词

Sql server 2008 SQL 2008:关闭全文搜索查询的停止词,sql-server-2008,full-text-search,stop-words,Sql Server 2008,Full Text Search,Stop Words,我很难找到一个好的解决方案: 假设我有一个“Company”表,其中有一列名为“Name”。我在这个专栏上有一个全文目录。如果用户搜索“非常好的公司”,我的查询是: SELECT * FROM Company WHERE CONTAINS(Name, '"Very" AND "Good" AND "Company"') 问题是在本例中,单词“Very”出现在标准的stopwords列表中: SELECT ssw.* FROM sys.fulltext_s

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

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

SELECT
    *
FROM
    Company
WHERE
    CONTAINS(Name, '"Very" AND "Good" AND "Company"')
问题是在本例中,单词“Very”出现在标准的stopwords列表中:

SELECT
    ssw.*
FROM
    sys.fulltext_system_stopwords ssw
WHERE
    ssw.language_id = 1033;
导致查询返回时没有行,即使有一行名为“非常好的公司”

我的问题是,我该如何在查询时关闭停止词?或者我该如何将它们完全移除


或者我应该用其他方法进行搜索吗?

以防其他人偶然发现此问题:

看起来在2008年有这样的选择;这对我来说并不明显,因为数据库是从2005年升级的,我不认为这是一个选项

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

ALTER DATABASE [MyDatabase] SET COMPATIBILITY_LEVEL = 100
然后,在通过向导创建全文索引时,有一个步骤允许您忽略索引的停止字

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

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

参考:

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

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
但我读过一篇帖子,上面说要绕开这个问题,在每次搜索的末尾加上一个*。


因此,在您的参数中,只需在搜索中添加*即可解决问题。

您不希望像其他帖子一样关闭停止词列表。对于大型数据集,性能会成为一个问题。但是,如果搜索
“cat*”和“the*”
,则前缀匹配不起作用。重新启用它在BOL中有点隐藏。您不仅需要将其设置为ON,还需要将其设置为您自己的一个停止列表的名称,或者使用
SYSTEM
来使用内置的:
ALTER FULLTEXT INDEX ON MyTable set STOPLIST=SYSTEM
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