Sql server 2008 SQL 2008:关闭全文搜索查询的停止词
我很难找到一个好的解决方案: 假设我有一个“Company”表,其中有一列名为“Name”。我在这个专栏上有一个全文目录。如果用户搜索“非常好的公司”,我的查询是: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
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