微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统它以简单方便易用等特性深得众多软件开发人员和数据库管理人员的钟爱但SQL Server 以前的数据库系统由于没有全文检索功能致使无法提供像文本内容查找此类的服务成为一个小小的遗憾从SQL Server 起到如今的SQL Server 终于具备了全文检索功能使用户可以高效地检索存储在数据库charvarchartextntextncharnvarchar等数据类型列中的文本数据
建立全文索引
在进行全文检索之前必须先建立和填充数据库全文索引为了支持全文索引操作SQL Server 新增了一些存储过程和TransactSQL语句使用这些存储过程创建全文索引的具体步骤如下(括号内为调用的存储过程名称)
启动数据库的全文处理功能(sp_fulltext_
database);
建立全文检索目录(sp_fulltext_catalog);
在全文检索目录中注册需要全文索引的表(sp_fulltext_table);
指出表中需要全文检索的列名(sp_fulltext_
column);
为表创建全文索引(sp_fulltext_table);
填充全文检索目录(sp_fulltext_catalog)
下面举例说明如何创建全文索引在本例中对Test数据库Book表中Title列和Notes列建立全文索引
use test //打开数据库
//打开全文索引支持启动SQL Server的全文搜索服务
execute sp_fulltext_database enable
//建立全文检索目录ft_test
execute sp_fulltext_catalog ft_test create
为Title列建立全文索引数据元pk_title为Book表中由主键所建立的唯一索引这个参数是必需的
execute sp_fulltext_table bookcreate ft_testpk_title
//设置全文索引列名
execute sp_fulltext_column book title add
execute sp_fulltext_column booknotes add
//建立全文索引
execute sp_fulltext_table book activate
//填充全文索引目录
execute sp_fulltext_catalog ft_test start_full
至此全文索引建立完毕
进行全文检索
SQL Server 提供的全文检索语句主要有CONTAINS和FREETEXTCONTAINS语句的功能是在表的所有列或指定列中搜索一个字或短语一个字或短语的前缀与一个字相近的另一个字一个字的派生字一个重复出现的字
CONTAINS语句的语法格式为
CONTAINS({column | *}) _condition>)
其中column是搜索列使用*时说明对表中所有全文索引列进行搜索Contains_search_
condition 说明CONTAINS语句的搜索内容其语法格式为
{||||}[{{AND|AND NOT|OR}}] [n] 下面就simple_term和prefix_term参数做简要说明
simple_term是CONTAINS语句所搜索的单字或短语当搜索的是一个短语时必须使用双引号作为定界符其格式为
{word| phrase}
prefix_term说明CONTAINS语句所搜索的字或短语前缀其格式为
{word* | phrase*}
例如下面语句检索Book表的Title列和Notes列中包含database或computer字符串的图书名称及其注释信息
select title notes
from book
where contains(tilte database) or contains(notesdatabase)
or contains(titlecomputer) or contains(notescomputer)
FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串并返回与该字符串匹配的数据行所以FREETEXT语句所执行的功能又称做自由式全文查询
FREETEXT语句的语法格式为FREETEXT({column | * }freetext_string)
其中column是被搜索列使用*时说明对表中的所有全文索引列进行搜索Freetext_string参数指出所搜索的自由文本格式字符串
例如下面语句使用FREETEXT语句搜索Book表中包含Successful Life字符串的数据行
select title notes
from book
where freetext(*Successful Life)