全文搜索的核心引擎建立在Microsoft Full-Text Engine for SQL Server (MSFTESQL) 服务提供支持
面对海量的数据,如何才能找到我需要的?对数百万行文本数据执行的LIKE 查询可能需要花费几分钟时间才能返回结果;但对同样的数据,全文查询只需要几秒或更少的时间,具体取决于返回的行数,全文检索提供了一种便捷的方式,轻松地让所需数据手到擒来。
下面介绍全文搜索的创建与应用:
1、全文检索的创建
use test
exec sp_fulltext_database 'enable'
-- FullTextName是保存索引文件的文件夹(数据库上体现是:全文目录名)
-- create表示创建
-- E:/SQL2005FullText表示FullTextName文件夹的根路径
exec sp_fulltext_catalog 'FullTextName', 'create', 'E:/SQL2005FullText'
-- 对News表创建全文搜索
-- PK_News是表的有效索引(一般用主键索引名)
exec sp_fulltext_table 'News', 'create', 'FullTextName','PK_News' --在已有的表上根据已有的索引创建全文索引
-- NewsContent是要创建全文搜索的列名
-- 0x0804代表简体中文的local ID
exec sp_fulltext_column 'News', 'NewsContent', 'add',0x0804
exec sp_fulltext_column 'News', 'NewsTitle', 'add',0x0804
-- 表启动完全填充(一般用于第一次生成全文检索时应用)
exec sp_fulltext_table 'News', 'start_full'
2、一旦设置好全文检索,你需要自己来维护全文索引的更新工作,这是因为全文目录的更新不是自动进行的。
-- 增量填充(表中必须有一个时间戳字段,否则它将转换为完全填充)
-- 可以使用SQL Server的Agent制定一个更新的计划,定时对索引做增量填充
EXEC sp_fulltext_catalog 'FullTextName','start_incremental'
-- 启动更改跟踪填充
exec sp_fulltext_table 'News','start_change_tracking'
exec sp_fulltext_table 'News','Start_background_updateindex'
创建完全文检索后,就可以用四个CONTAINS, FREETEXT,CONTAINSTABLE, FREETEXTTABLE谓词进行查询
3、性能
全文检索的填充和查询都需要花费系统开销,使用全文检索,你需要考虑性能上的问题,某一种方法比另外一种方法好并没有一个绝对的评判标准。你需要根据具体情况自己来对比不同方法的优劣。不过还是有一些建议:
设置全文索引时的考虑如果要检索的记录数比较少,如少于100万条。那么可以考虑为多个表保存在一个全文目录中;如果表的记录数非常大,超过100万条。那么可以考虑单独为这个大表创建一个全文目录。
索引填充时候的考虑:无论你是用什么样的填充(完全填充、增量填充还是更改跟踪填充),你安排填充的时间最好是在数据库处于非高峰活动期间来进行。
全文检索时的考虑:CONTAINS谓词查询返回的数据相对比FREETEXT少,精确度也高。如果你更多的考虑速度,那么FREETEXT可能是你的选择,它的检索速度一般比CONTAINS快,但是FREETEXT占用的CPU 资源也要比CONTAINS高。关于全文检索的性能和优化,Microsoft站点有一篇很好的文章《使用Microsoft SQL Server 2000的全文搜索功能构建Web搜索应用程序》,见参考书目。
SQL SERVER中全文检索的创建与应用
最新推荐文章于 2019-06-11 11:27:00 发布