如何创建全文索引

本文介绍了在SQLServer2008R2环境下如何利用存储过程创建全文索引,包括开启全文处理功能、建立全文目录、注册表并指定检索列,以及创建和填充全文索引的全过程。通过实例演示,展示了如何使用SQLServer自带功能简化全文索引的创建流程。最后,提供了手动建立全文索引的方法,以及如何在数据库中查看已创建的全文索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章介绍在SQL Server 2008 R2 下的全文索引,它能够对数据中的字符类型列(如varchar、text等类型)进行索引,并通过索引实现全文搜索查询。首先对比简单介绍一下常规索引和全文索引的区别,如下图:
OK,下面我们就利用SQL Server 提供的存储过程来建立一个全文索引,具体步骤为:

(1)启动数据库的全文处理功能(sp_fulltext_datebase);
(2)建立全文目录(sp_fulltext_catalog);
(3)在全文目录中注册需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文检索的列名(sp_fulltext_column)
(5)为表创建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。

接下来用实例一步步演示:
 
复制代码
use  DBFullText

--  建表
create  table  Student
(
id 
int   identity ( 1 , 1 ) ,
name 
nvarchar ( 30 null ,
familyAddress 
nvarchar ( 100 null ,
schoolAddress 
nvarchar ( 100 null
constraint PK_Student primary key (id)
         on "PRIMARY"
) on "PRIMARY"

-- 插入一些数据
insert  into  Student  values ( ' SAVEA ' , ' 187 Suffolk Ln. ' , ' 1900 Oak St. ' )
insert  into  Student  values ( ' VICTE ' , ' 2, rue du Commerce ' , ' 23 Tsawassen Blvd. ' )
insert  into  Student  values ( ' BLONP ' , ' 24, place Kléber ' , ' 25, rue Lauriston ' )
insert  into  Student  values ( ' PARIS ' , ' 265, boulevard Charonne ' , ' 2732 Baker Blvd. ' )
insert  into  Student  values ( ' OLDWO ' , ' 2743 Bering St. ' , ' 2817 Milton Dr. ' )
insert  into  Student  values ( ' WANDK ' , ' Adenauerallee 900 ' , ' Åkergatan 24 ' )
insert  into  Student  values ( ' BERGS ' , ' Berguvsvägen 8 ' , ' Carrera 22 con Ave. Carlos Soublette #8-35 ' )
insert  into  Student  values ( ' SANTG ' , ' Carrera 52 con Ave. Bolívar #65-98 Llano Largo ' , ' Erling Skakkes gate 78 ' )
insert  into  Student  values ( ' OCEAN ' , ' Grenzacherweg 237 ' , ' Jardim das rosas n. 32 ' )
insert  into  Student  values ( ' LEHMS ' , ' Sierras de Granada 9993 ' , ' Via Ludovico il Moro 22 ' )
insert  into  Student  values ( ' SIMOB ' , ' South House 300 Queensbridge ' , ' P.O. Box 555 ' )


-- 检查 DBFullText 是否支持全文索引,如果不支持全文索引,则使用sp_fulltext_datebase打开该功能
--DBFullText为数据库名
--if  ( select  databaseproperty ( ' DBFullText ' , ' IsFulltextEnables ' )) = 0 --该语句不用执行
exec  sp_fulltext_database  ' enable '


-- 创建全文目录(‘全文目录名‘,’创建/删除‘) 
exec  sp_fulltext_catalog  ' FT_Student ' , ' create '


-- 创建全文索引(‘表名‘,’创建/删除‘,’名称‘,’约束名‘),这里的约束名就是建表的时候自动生成的主键约束
exec  sp_fulltext_table  ' Student ' , ' create ' , ' FT_Student ' , ' PK_Student '


-- 设置全文索引列(‘表名‘,’列名‘,’添加/删除‘) 
exec  sp_fulltext_column  ' Student ' , ' familyAddress ' , ' add '
exec  sp_fulltext_column  ' Student ' , ' schoolAddress ' , ' add '


-- 激活表的全文检索能力,也就是在全文目录中注册该表
exec  sp_fulltext_table  ' Student ' , ' activate '


-- 填充全文索引目录
exec  sp_fulltext_catalog  ' FT_Student ' , ' start_full '


-- 测试一下
select * from  Student  where  contains  (familyAddress, ' South ' )
select * from  Student  where  contains  (schoolAddress, ' Dr. ' )
复制代码
 
OK,现在全文搜索的SQL Server代码部分已经做完。其实在SQL Server 2008 R2里面,完全不用上面那么多代码去操作存储过程创建全文索引,
它自带的有 ‘ Full Text Catalogs’,我们完全可以手动建立一个全文索引(实现过程当然是调用存储过程,只不过在这里省略了),首先找到目录
Storage -> Full Text Catalogs,然后创建一个新的Full Text Catalog,如下图
 
 
 然后打开它,选择要进行全文索引的列,如下图
 
 
保存之后,即可做如上述的全文搜索。

获取数据库中创建的全文索引:sp_help_fulltext_catalogs
### 如何在 SQL Server 中创建全文索引 为了成功创建全文索引,必须先建立全文目录作为存储一个或多个全文索引的虚拟容器[^1]。 具体来说,在SQL Server中创建全文索引的过程涉及以下几个方面: - **准备阶段**:确认已存在合适的唯一键索引来支持全文索引。此唯一键通常是一个聚集索引或者非聚集唯一索引[^4]。 - **定义全文目录**:如果尚未有可用的全文目录,则需先行创建。这一步骤可以通过SQL Server Management Studio (SSMS) 或者 T-SQL 命令完成。 - **执行创建命令**:利用 `CREATE FULLTEXT INDEX` 语法来指定待处理的数据表及其列名,并指明用于关联记录的关键字索引名称以及目标全文目录的名字(可选)。此外还可以设置诸如变更跟踪模式(`CHANGE_TRACKING`) 和停用词列表 (`STOPLIST`) 的选项参数。 下面是一段示范性的T-SQL脚本,展示了如何针对名为`table_name`的数据表构建全文索引: ```sql -- 创建全文索引前确保已经有一个唯一的键索引存在于该表上 USE YourDatabaseName; GO IF NOT EXISTS(SELECT * FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('dbo.table_name')) BEGIN CREATE UNIQUE CLUSTERED INDEX IX_table_name_UniqueKey ON dbo.table_name(YourPrimaryKeyColumn); -- 如果还没有创建全文目录则可以在此处添加如下语句创建它 IF NOT EXISTS (SELECT * FROM sys.fulltext_catalogs WHERE name='MyFullTextCatalog') CREATE FULLTEXT CATALOG MyFullTextCatalog AS DEFAULT; -- 开始创建全文索引 CREATE FULLTEXT INDEX ON dbo.table_name ( ColumnToBeIndexed, Type COLUMN DocumentTypeColumn LANGUAGE 1033 ) KEY INDEX IX_table_name_UniqueKey ON MyFullTextCatalog WITH CHANGE_TRACKING AUTO, STOPLIST = SYSTEM ; END; ``` 上述代码片段中的`ColumnToBeIndexed`代表要被纳入全文检索范围的具体字段;而`DocumentTypeColumn`则是用来指示文件类型的辅助列(对于纯文本内容可能不需要),最后部分设置了自动变更追踪机制并启用了系统默认停止词过滤器。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值