全文索引和全文检索是sql server 的新增功能它能够对数据中的字符类型列(如varchartext等类型列)进行索
引并通过索引实现全文搜索查询sql server常规索引与全文检索相比二者的区别如下
常规索引 全文索引
使用create index或约束定义创建 使用全文索引存储过程创建和删除
通过删除或执行drop index语句删除
当插入修改或删除数据时sql server 只能通过任务调度或执行存储过
能够自动更新常规索引内容 程来填充全文索引
每个表可以建立多个常规索引 每个表只能有一个全文索引
索引不能分组 同一个数据库中的多个全文索引可
以组织为一个全文目录
常规索引存储在数据库文件中 全文索引存储在文件系统中
为了支持全文索引操作sql server 新增了一些新存储过程和transactsql语句使用这些存储过程创建全文索引的
具本步骤为(括号内为每步所调用的存储过程名称)
()启动数据库的全文处理功能(sp_fulltext_datebase)
()建立全文目录(sp_fulltext_catalog)
()在全文目录中注册需要全文索引的表(sp_fulltext_table)
()指出表中需要全文检索的列名(sp_fulltext_column)
()为表创建全文索引(sp_fulltext_table)
()填充全文索引(sp_fulltext_catalog)
例
use pubs
go
exec sp_fulltext_database enable
为titles表建立全文索引数据元其中create为建立activate为激活deactivate为关闭表全文索引的激活状态使
它不再参加全文目录填充drop为删除create参数中后面跟的是全文目录名称和索引列名
下面语句为pubs数据库中的titles表创建全文索引数据元存储该数据元的全文目录为FT_pubs所使用的唯一索引为
UPKCL_titleidind(title表中为title_id列的PRIMARY KEY约束所建立的唯中索引)
sp_fulltext_table titlescreateFT_pubsupkcl_titledind
激活它
sp_fulltext_table titlesactivate
指定参加全文索引的列
sp_fulltext_column titlestitleadd
sp_fulltext_column titlesnotesadd
下面是一个完整的例子
在执行该脚本程序之前启动sql server的全文搜索服务即microsoft search服务
use pubs 打开数据库
go
检查pubs是否支持全文索引如果不支持全文索引则使用sp_fulltext_datebase打开该功能
if (select databaseproperty (pubsIsFulltextEnables))=
execute sp_fulltext_database enable
建立全文目录FT_pubs
execute sp_fulltext_catalog FT_pubscreate
为titles表建立全文索引数据元
execute sp_fulltext_table titlesFT_pubsUPKCL_titleidind
设置全文索引列名
execute sp_fulltext_column titlestitleadd
execute sp_fulltext_column titlesnotesadd
建立全文索引
execute sp_fulltext_table FT_pubsactivate
填充全文索引目录
execute sp_fulltext_catalog FT_pubsstart_full
GO
检查全文目录填充情况
WHILE FulltextCatalogProperty(FT_pubsPopulateStatus)<>
BEGIN
如果全文目录正处于填充状态则等待秒后再检测一次
WAITFOR DELAY
END
全文目录填充完成后使用全文目录检索
查询title列或notes列中包含有database或computer字符串的图书名称
SELECT title
FROM title
where CONTAINTS(titledatabase)
or contains(notesdatabase)
or contains(titlecomputer)
or contains(notescomputer)