• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

Sqlserver2008及以上使用全文索引排除干扰词 (转载)

关于SQLServer2008全文索引干扰词
使用SQL SERVER 2008全文索引
进行搜索 contains(Keywords, '"xx of xx*"') (注意是后面有包含"*"号的查询),由于包含了类似"of","and","or"等这类默认的全文索引干扰词,导致查询不到结果。
可以按如下方法解决:
1.自定自己的干扰词库

可以按如下方法解决:1.自定自己的干扰词库

--创建全文非索引字表(干扰词表)
CREATE FULLTEXT STOPLIST T_FULLTEXT_STOPLIST_TableName --全文非索引字表表名
FROM SYSTEM STOPLIST; --从系统全文非索引字表导入

--删除我们不需要的干扰词,如"of"字
ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName]
DROP 'of' LANGUAGE 'Simplified Chinese';

--增加我们需要的干扰词,如"of"字
ALTER FULLTEXT STOPLIST [T_FULLTEXT_STOPLIST_TableName]
ADD 'of' LANGUAGE 'Simplified Chinese';
由于此方法有点麻烦,所以我就没去具体测试了。

2.直接关闭干扰词功能

-设置关闭全文索引干扰词
ALTER FULLTEXT INDEX ON [TableName] SET stoplist OFF
--如果要再开启,可以这样设置开启全文索引干扰词
ALTER FULLTEXT INDEX ON [TableName] SET stoplist SYSTEM

如果执行以上语句出现了如下错误:
'stoplist' 附近有语法错误。
或
Incorrect syntax near 'STOPLIST'.

那是因为SQL Server兼容级别的问题,解决方法为,执行以下语句:
--改变SQL兼容性版本80 = SQL Server 2000, 90 = SQL Server 2005, 100 = SQL Server 2008...
ALTER DATABASE DatabaseName SET COMPATIBILITY_LEVEL = 100

 

在网上查了很多关于全文索引查不到数据的问题。
上面说是干扰词的问题,需要修改相应的文件,但是SQL2008的文件又和SQL2005版本的位置什么的不一样,需要用SQL语句进行修改,但是用SQL语句提示没有权限,或干脆找不到这些文件,改了也不管用等,所以SQL2008干扰词的问题很令人头疼。而且很难找到一个好的解决办法。
 
在这里,有一个新的办法,可以解决或避开这些麻烦的问题。
 
关键:你所建立的全文索引,如果是手动建立的,没有给他指定干扰词表,那么他就会自动的指定系统的干扰词表。
 
所以,要手动建立一个属于自己的干扰词表,不用系统的了,因为上面提到过,它很麻烦。
 
语句:
CREATE FULLTEXT STOPLIST MyFsyTable --全文非索引字表表名(也就是干扰词表)
FROM SYSTEM STOPLIST; --从系统全文非索引字表导入
 
--下面是删除你想删除的干扰词
ALTER FULLTEXT STOPLIST MyFsyTable 
DROP '一' LANGUAGE 'Simplified Chinese';
 
最后,在你建立的表上右键-全文索引-属性-常规-全文索引非索引字表(也就是干扰词表)-下拉框选择你刚才建立的干扰词表
 
好了,如果你的全文索引是自动填充的,等待它填充完毕,或者手工重新完全填充。
 
最后,查询,大功告成了!

 

原文链接

 

posted @ 2018-12-08 17:25  PowerCoder  阅读(520)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3