全文检索可以对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 行) 全文索引的简单介绍就到这里了,希望能起个抛砖引玉的作用。 |
请发表评论