标题SQL Server中全文检索的使用
栏目软件世界
作者刘君
发布2001年40期
引 言
全文检索使用户可以高效检索存储在数据库的char、varchar、text、ntext、nchar、nvarchar等数据类型列中的的文本数据。在进行全文检索之前,应建立和填充数据库全文索引。
全文索引
为了支持全文索引操作,SQL Server 7.0新增了一些存储过程和Transact-SQL语句。使用这些存储过程创建全文索引的具体步骤如下(括号内为每步所调用的存储过程名称):
1.启动数据库的全文处理功能(sp_fulltext_database);
2.建立全文目录(sp_fulltext_catalog);
3.在全文目录中注册需要全文索引的表(sp_fulltext_table);
4.指出表中需要全文检索的列名,(sp_fulltext_column);
5.为表创建全文索引(sp_fulltext_table);
6.填充全文目录(sp_fulltext_catalog)。
下面举例说明(在本例中,对test数据库book表中title列和notes列建立全文索引):
//首先启动SQL Server的全文搜索服务。
use test //打开数据库
go
//打开全文索引支持
execute sp_fulltext_database 'enable'
//建立全文目录ft_pubs
execute sp_fulltext_catalog 'ft_test', 'create'
//为titles表建立全文索引数据元,pk_title为book表中由主键所建立的唯一索引,此参数必需。
execute sp_fulltext_table 'book', 'create', 'ft_test', 'pk_title'
//设置全文索引列名
execute sp_fulltext_column 'book', 'title', 'add'
execute sp_fulltext_column 'book', 'notes', 'add'
//建立全文索引
execute sp_fulltext_table 'book', 'activate'
//填充全文索引目录
execute sp_fulltext_catalog 'ft_test', 'start_full'
go
至此,全文索引建立完毕。
全文检索
SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。
CONTAINS语句的功能是在表所有列或指定列中搜索:
·一个字或短语;
·一个字或短语的前缀;
·与一个字相近的另一个字;
·一个字的派生字;
·一个重复出现的字。
CONTAINS语句的语法格式为:“CONTAINS({column | *}),'<contains_search_condition>')”,其中column说明被搜索列,使用时说明对表中所有全文索引列进行搜索。Contains_search_condition用以说明CONTAINS语句的搜索内容,其语法格式为:“{<simple_term>|<prefix_term>|<proximity_term>|<generation_term>|<weighted_term>} [{{AND|AND NOT|OR}<contains_search_condition>}][…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(notes, 'database') or contains(title, 'computer') or contains(notes, 'computer')
FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。FREETEXT语句的语法格式为:“FREETEXT({column|*} 'freetext_string')。其中,column说明被搜索列,使用*时说明对表中的所有全文索引列进行搜索。Freetext_string参数指出所搜索的自由文本格式字符串。
例如,下面语句使用FREETEXT语句搜索book表中包含 Successful Life字符串的数据行:
select title, notes
from book
where freetext(*,'Successful Life')
本篇文章主要阐明了全文检索的功能,介绍了全文索引的建立 以及全文检索语句CONTAINS和FREETEXT的使用。希望能对大家有所帮助,有任何意见请联系:yuheng@public.yc.nx.cn