0

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

我有什么办法可以让停用词被忽略而不被索引?

4

1 回答 1

2

我很感激这已经很晚了,它可能会帮助其他人。

根据系统停止列表创建一个newstoplist;这将创建一个新的停止列表,其中包含系统停止列表中的所有单词(您无法在 2008+ sql 中修改)

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
于 2015-01-17T08:49:01.663 回答