我正在使用SQL Server 2008 R2和freetexttable对我的网站进行全文搜索。输入停用词时出现此错误:
信息:全文搜索条件包含干扰词。
所以我按照每个人的说法做了并打开了变换噪音词,因此忽略了停止/干扰词并且查询可以继续。但这没有改变:
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO
我仍然收到相同的错误消息。所以现在我唯一的选择是关闭停止列表,但这很糟糕,因为如果有人在搜索中放入“the”,它将返回所有页面,因为每个页面中都有“the”。我想删除停用词,但SQL Server 2008 R2对我不起作用。
有没有人真的让这个在2008 R2上班?我的兼容级别已经是100。
我有什么方法可以让停止的词语被忽略而不被编入索引?
答案 0 :(得分:2)
我很欣赏这很晚才有可能帮助其他人。
根据系统停止列表创建一个新的停止列表;这会创建一个新的停止列表,其中包含系统停止列表中的所有单词(您无法在2008 + s中修改)
CREATE FULLTEXT STOPLIST slMyNewStopList
FROM SYSTEM STOPLIST AUTHORIZATION dbo;
然后我检查了新的候选名单是否正确创建;
select * from sys.fulltext_stoplists
select * from sys.fulltext_stopwords
在我的情况下,新的停止列表是ID 6.我想删除的是它;因为人们希望能够在数据中搜索“IT功能”。所以我检查了目录中的单词;
select * from sys.fulltext_stopwords
where stoplist_id = 6 and stopword = 'it' and language like '%english%'
要从停止列表中删除单词,您需要调用系统函数;我把它删除了英语和英国英语。此时你必须拥有半冒号。
ALTER FULLTEXT STOPLIST slMyNewStopList DROP 'it' LANGUAGE 'English';
ALTER FULLTEXT STOPLIST slMyNewStopList DROP 'it' LANGUAGE 'British English';
然后我通过再次运行选择查询确认我的停止列表中缺少该词
select * from sys.fulltext_stopwords
where stoplist_id = 6 and stopword = 'it' and language like '%english%'
然后我更新了我希望能够搜索IT词的表格;
USE [Database]
GO
ALTER FULLTEXT INDEX ON [dbo].[tblDocuments] SET STOPLIST = [slMyNewStopList]
最后,我重建了目录,因此文档全部重新编制索引。
USE [Database]
GO
ALTER FULLTEXT CATALOG [catExample] REBUILD
GO