本文标签:SQL2000,全文索引
全文检索可以对varchar,text,image型字段进行检索,但一个表最多只能建一个全文索引 SQL Server 2000 引入了对存储在 image 列中的这些类型的数据执行全文检索的能力 。 如果没有全文索引,对字符的模糊查询只能对基表进行全表扫描(或索引扫描), 执行模糊查询都需要对全表扫描或索引扫描意味着消耗大量IO 。 如果模糊查询经常发生,会造成数据库性能恶化 。 本篇为简单起见,仅在varchar型字段上图文演示非常完整的而且是高效可行的全文索引 创建及维护过程. 1: 在企业管理器中展开要建立全文索引的数据库,右击“全文目录”,选择“新建全文目录” 如 图1 所示 。 可以修改全文目录的路径,通过将全文目录放在单独的磁盘或磁盘阵列可以提高效率 。 建议不要对整个全文目录进行任何形式的填充调度 。
 =================== 图1 =================== 2: 接下来对具体的表添加全文索引 。 全文索引不能建立在视图上,只能建立在有唯一索引(主键也是唯一索引)的基础表上 。 下图2 演示如何对表建立全文索引 。 演示中的 t_fulltext 表的建表及初始化数据的脚本如下: create table t_fulltext ( rid int identity(1,1), title varchar(256) not null, writetime datetime default(getdate()) ) go alter table t_fulltext add constraint pk_fulltext primary key ( rid ) go --初始化数据 insert into t_fulltext(title) values(山东蓬莱河西金矿透水事故2人死亡3人失踪(21:29)) insert into t_fulltext(title) values(泰国将在广西南宁设立总领事馆(21:10)) insert into t_fulltext(title) values(河北安徽等12省减免农业税等政策落实到位(20:43)) insert into t_fulltext(title) values(台湾学者托梦预测陈水扁元旦讲话(20:04)) insert into t_fulltext(title) values(澳门特首何厚铧发表元旦献辞向市民问候新年(20:02)) insert into t_fulltext(title) values(南水北调首个建成项目山东段济平干渠通水成功(19:48)) insert into t_fulltext(title) values(组图:北京110摩托车巡警亮相(18:07)) insert into t_fulltext(title) values(福建广西发生患者死亡事件 医院责任人被处理(17:33)) insert into t_fulltext(title) values(北京大容量公交车运营首日遭遇乘客爆满(17:30)) insert into t_fulltext(title) values(北京公安系统今天全部停休严查五环内放炮(17:30)) insert into t_fulltext(title) values(研究发现海龙基因酶对禽流感病毒有杀伤作用(17:27)) insert into t_fulltext(title) values(上海世博会筹办进入实质性操作面临五大挑战(17:03)) insert into t_fulltext(title) values(台媒体称陈水扁元旦祝词必将老调重弹(15:30)) insert into t_fulltext(title) values(珠三角咸潮影响范围小于去年(15:12)) insert into t_fulltext(title) values(上海市民体验轨道交通4号线列车(组图)(14:53)) insert into t_fulltext(title) values(广州亿元集资诈骗案主犯王日升被判死缓(图)(14:44)) insert into t_fulltext(title) values( 评论:取消农业税让民众共享经济增长成果(17:30)) insert into t_fulltext(title) values(香港媒体谈美国应对中国新策略:合作与防范(15:57)) insert into t_fulltext(title) values(专访中国地震局局长陈建民:地震是能够预测的(15:56)) insert into t_fulltext(title) values(评论:野蛮公交莫成城市丑陋形象代言人(13:27)) insert into t_fulltext(title) values(台媒体称当局与民间企业对立非民众之福(12:50))
 =================== 图2 =================== 3:出现的欢迎界面如 图3
 =================== 图3 =================== 4:为全文索引选择唯一索引,如 图4
 =================== 图4 =================== 5:选择全文索引的列,注意一张表只能建一个全文索引 。建 议不要选择断词的语言,这样实际会使用默认的断词语言 。如图5 所示 。 通过运行 sp_configure default full-text language 可以查看默认的断词语言,如我的机器上运行上条语句,config_value 值是 2052 它表示简体中文 。 其它代码所表示的语言可以查阅Book Online的“default full-text language”关键词 。 由于SQL Server对中文断词并不是很高明,因此并不能依靠SQL Server带给您非常智能的搜索,这意味着您的全文搜索结果,可能有不希望出现的记录,或您希望出现的记录没有出现 。
 =================== 图5 =================== 6:将表指派到全文目录,如 图6 所示,也可以通过此界面创建新目录 。
 =================== 图6 =================== 7:接下来会提示对表进行填充调度,为能够准实时地把基表的全文索引列的修改(增、删、改)准实时地应用到全文索引,建议使用下面介绍的其它方法进行索引维护 。如 图7 所示,建议不要在这里添加任何调度,直接点击“下一步” 。 如果数据不会再修改,则在一次完全填充以后,不用再增加其它类型的表级填充 。 如果实施到本步骤,不再添加任何形式的表调度,那么基表数据的更新,将不能更新到全文索引 。
 =================== 图7 =================== 8:如 图8 所示出现的完成界面提示中点击“完成 ”,请稍微等待直到出现下一界面 。
 =================== 图8 =================== 9:在如 图9 所示的界面中点击“确定” 。 由于尚未在表上添加任何调度,因此还需要继续设置 。
 =================== 图9 =================== 10:在企业管理器中右击 f_fulltext 表,如 图10 所示,选中“更改跟踪” 。 选中更改跟踪后,以后对基表数据的修改,才能反映到全文索引中 。 特别注意:一旦选中“更改跟踪”,根据经验,其实是必须对该表进行完全填充的 。 如果是在线使用的全文索引数据库,选中“更改跟踪”会导致性能迅速下降,导致全文索引 无法使用 。
 =================== 图10 =================== 11: 在企业管理器中右击 f_fulltext 表,如 图11 所示,选中“更新后台中的索引” 。 到本步,全文索引就完全完成了 。由于我们选中了“更改跟踪”,此时实际已经开始了表的完全填充 。 根据经验,300万条全文索引字段长为 50 的表,需要8到10小时才能完成完全填充 。
 =================== 图11 =================== 12:可以通过双击全文目录下的全文索引,查看该全文目录的属性,如 图12 所示,状态为“空闲”,而项目计数大于0,则表示完全填充已经完成了 。
 =================== 图12 =================== 13:如何进行全文索引查询(仅简单介绍) 全文索引查询建议使用 CONTAINS 及 FREETEXT 谓词进行查询 。 如果关键词仅包括干扰词(有关干扰词的信息,请参阅Book Online的“干扰词”关键字) select * from t_fulltext where contains(title,3) 则会报如下错误 服务器: 消息 7619,级别 16,状态 1,行 1 全文操作运行失败 。查询子句只包含被忽略的词 。 使用下面的语法,能避免出现错误,且能够确实查询出正确的记录 。 select * from t_fulltext where contains(title,"*3*") 13 台媒体称陈水扁元旦祝词必将老调重弹(15:30) 2005-12-31 23:17:17.670 10 北京公安系统今天全部停休严查五环内放炮(17:30) 2005-12-31 23:17:17.653 17 评论:取消农业税让民众共享经济增长成果(17:30) 2005-12-31 23:17:17.670 9 北京大容量公交车运营首日遭遇乘客爆满(17:30) 2005-12-31 23:17:17.653 8 福建广西发生患者死亡事件 医院责任人被处理(17:33) 2005-12-31 23:17:17.653 (所影响的行数为 5 行) 全文索引的简单介绍就到这里了,希望能起个抛砖引玉的作用 。
|