sql server 2008全文索引干扰词示例--转

处理网站查询包含”之”字出现”全文搜索条件中包含干扰词”现象的总结:
author:perfectaction
Sql server 2008全文索引的干扰词表默认在Resource库系统表内,无法更改,但sql2008提供了自定义干扰词表的功能,可绑定到某个全文索引上。

相关操作如下:

-- sql server 2008 全文索引建立及创建全文非索引字表(干扰词表)
--
以dbtest的user_info表为例
--
选择数据库
USE  dbtest
GO

-- 创建全文目录,这个是逻辑名
CREATE  FULLTEXT CATALOG user_info  AS   DEFAULT ;
GO

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

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

-- 增加我们需要的干扰词,如"之"字
ALTER  FULLTEXT STOPLIST  [ T_FULLTEXT_STOPLIST_user_info ]  
ADD   ' '  LANGUAGE  ' Simplified Chinese ' ;


-- 创建表user_info的全文索引
CREATE  FULLTEXT  INDEX   ON   [ dbo ] . [ user_info ]   -- 表名
( [ mem_name ]   -- 列名
LANGUAGE  [ Simplified Chinese ] )
KEY   INDEX   [ PK_user_info ]   -- 聚集索引名
ON  (FILEGROUP  [ ftfg_FT_user_info ] -- 指定文件组名,如不指定,则存在当前表所在文件组
WITH  (CHANGE_TRACKING  =  AUTO, 
STOPLIST 
= T_FULLTEXT_STOPLIST_user_info  -- 指定使用的全文非索引字表
)


-- 其它:
--
对已存在全文索引指定全文非索引字表,命令执行后,
--
如果CHANGE_TRACKING = AUTO,则会自动修改已填充索引,但不会全部重填
ALTER  FULLTEXT  INDEX   on  user_info  -- 表名
SET  STOPLIST  = SYSTEM   -- 指定使用的全文非索引字表为系统自带

ALTER  FULLTEXT  INDEX   on  user_info  -- 表名
SET  STOPLIST = T_FULLTEXT_STOPLIST_user_info  ; -- 指定使用的全文非索引字表为用户自定义

-- 启动填充,如果CHANGE_TRACKING != AUTO,则需要启动一次填充才使新设定的全文非索引字表生效;
ALTER  FULLTEXT  INDEX   on  user_info  -- 表名
START  FULL  POPULATION


===========================================================================================
总结:
1.SQL  2008 需要开启search 服务。
2.SQL 2008  登陆角色要有相应的操作权限,一般加上SYSADMIN
3.SQL 2008 的数据库的兼容基本应该是SQL SERVER 2008(100)
 
4.对已存在的fulltext功能的table,或者从SQL 2005 升级到SQL 2008 的数据库;
需要做如下修改:
-- 创建全文非索引字表(干扰词表)
CREATE  FULLTEXT STOPLIST T_FULLTEXT_STOPLIST_user_info  -- 全文非索引字表表名
FROM  SYSTEM STOPLIST;
 
-- 删除我们不需要的干扰词,如"之"字  ;英文用 language 'English' or Language_id 1033
ALTER  FULLTEXT STOPLIST  [ T_FULLTEXT_STOPLIST_user_info ]  
DROP   ' '  LANGUAGE  ' Simplified Chinese ' ;

-- 增加我们需要的干扰词,如"之"字   
ALTER  FULLTEXT STOPLIST  [ T_FULLTEXT_STOPLIST_user_info ]  
ADD   ' '  LANGUAGE  ' Simplified Chinese ' ; 
 
--应用到指定table中  
ALTER  FULLTEXT  INDEX   on  [tablename]  -- 表名
SET  STOPLIST = T_FULLTEXT_STOPLIST_user_info  ; -- 指定使用的全文非索引字表为用户自定义 
 
--查看系统默认干扰词列表
  select * from sys.fulltext_stopwords   
 
 --查看table是否存在全文索引
select * from sys.fulltext_indexes
where object_id = object_id('[tablename]')  
 
在SQL 2008中,我们可以通过查询系统表值函数sys.dm_fts_index_keywords  和sys.dm_fts_index_keywords_by_document来查看断词结果。
 
SELECT display_term FROM sys.dm_fts_index_keywords_by_document( DB_ID ( ' TestFT ' ), OBJECT_ID ( ' TB ' )) WHERE document_id = 2 and column_id = 3 -- 全文键值为2 第3列
 
使用sys.dm_fts_parser来分析断词结果,sys.dm_fts_parser函数用起来更加灵活。
SELECT special_term,display_term FROM sys.dm_fts_parser( ' 宁夏固原有一位网友给敬爱的苍老师写了一封信 ' , 1028 , 0 , 0 ) -- 繁体中文
SELECT special_term,display_term FROM sys.dm_fts_parser( ' 宁夏固原有一位网友给敬爱的苍老师写了一封信 ' , 2052 , 0 , 0 ) -- 简体中文

=================================================================

The first thing you need to do is set the compatibility level up to 2008:

ALTERDATABASE[MyDatabase]SET COMPATIBILITY_LEVEL =100

Then, when creating the full-text index through the wizard, there is a step that allows you to ignore stopwords for the index

edit: Here's the script to do it as well:

ALTER FULLTEXT INDEXON MyTable SET STOPLIST =OFF
 
==============================================================

使用 transform noise words 服务器配置选项可以取消干扰词(即非索引字)导致全文查询的布尔操作返回零行时产生的错误消息。 此选项对于使用其布尔操作或 NEAR 操作包括干扰词的 CONTAINS 谓词的全文查询非常有用。

sp_configure 'show advanced options',1;
RECONFIGURE;
GO
sp_configure
'transform noise words',1;
RECONFIGURE;
GO
 
 
 
 

转载于:https://www.cnblogs.com/zcm123/archive/2012/12/04/2801019.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值