数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL Server全文检索简介


发布日期:2023年06月07日
 
SQL Server全文检索简介

全文索引和全文检索是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)

上一篇:绕过程序限制和利用系统表注入SQL Server

下一篇:用VFP的DBF进行SQL Server的分布式查询