使用Freetexttable在噪声字上失败的全文搜索 - SQL Server 2008 R2转换噪声字无法正常工作

时间:2014-07-19 09:47:48

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

我正在使用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。

我有什么方法可以让停止的词语被忽略而不被编入索引?

1 个答案:

答案 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