2009年3月2日星期一

SQL2008新变化系列1:全文索引干扰词

SQL2008是微软的数据库新产品,相对于上一个版本SQL2005有些许变化,下面就实际遇到的问题分主题罗列一下解决方法

使用全文索引查询时,对包含"之"字出现"全文搜索条件中包含干扰词"现象:

Sql server 2008全文索引的干扰词表默认在Resource库系统表内,无法更改,但sql2008提供了自定义干扰词表的功能,可绑定到某个全文索引上。

相关操作如下:

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

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

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

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

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


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


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

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

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