一:简要介绍下全文索引
可以利用索引快速访问数据库表中的特定信息。索引是对数据库表中一个或多个列的值进行排序的结构。
索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。
数据库使用索引的方式与使用书的目录很相似:通过搜索索引找到特定的值,然后跟随指针到达包含该值的行
二:全文索引的相关操作
1.确认全文索引是否开启
对于SQL2005每个创建的数据库全文索引特性默认是开启的
可以通过这个语句来确认它是否开启了
SELECT
databasePropertyex(
'
xland
'
,
'
isfulltextenabled
'
)
返回0为未开启,返回1为已开启
2.激活和禁止全文索引
禁用全文索引一定要注意,已经存在的全文目录,数据表同该目录的任何关联信息都会被删除
三.全文目录的相关操作
1.创建全文目录
创建全文目录的时候,全文索引一定要为enable状态
全文目录存放的路径一定要有效
2.激活和禁止全文索引
禁用全文索引一定要注意,已经存在的全文目录,数据表同该目录的任何关联信息都会被删除
exec
sp_fulltext_database
@action
=
'
disable
'
'enable'为激活
3.创建全文索引
use
xland
go
create fulltext index on dbo.mytable -- 在某个表上创建全文索引
(title language English) -- 对某个列使用全文索引
key index Pk_mytable -- 索引名(一般就是表名前面加Pk)
on maincatalog
with change_tracking off , -- 关闭跟踪特性
no population -- 不进行初始化填充
go
create fulltext index on dbo.mytable -- 在某个表上创建全文索引
(title language English) -- 对某个列使用全文索引
key index Pk_mytable -- 索引名(一般就是表名前面加Pk)
on maincatalog
with change_tracking off , -- 关闭跟踪特性
no population -- 不进行初始化填充
其中Eglish可改为简体中文
可通过
可通过
select
name alias
from
master..syslanguages
查询系统中支持的语言
修改和删除全文索引
修改和删除全文索引
drop
fulltext
index
on
dbo.mytable
三.全文目录的相关操作
1.创建全文目录
创建全文目录的时候,全文索引一定要为enable状态
全文目录存放的路径一定要有效
use
xland
go
exec sp_fulltext_database @action = ' enable '
go
create fulltext catalog maincatalog
in path ' c:\fulltext '
go
exec sp_fulltext_database @action = ' enable '
go
create fulltext catalog maincatalog
in path ' c:\fulltext '
更改和删除分别是alter和drop
drop
fulltext catalog maincatalog
与其他的没有太多区别
2.填充全文目录
这是个后台的过程,表大的话虽然提示成功了,但是后台还在填充
这是个后台的过程,表大的话虽然提示成功了,但是后台还在填充
alter
fulltext
index
on
dbo.mytable
start full population
或
start full population
use
xland
go
exec sp_fulltext_table @tabname = ' dbo.mytable ' ,
@action = ' start_full '
go
exec sp_fulltext_table @tabname = ' dbo.mytable ' ,
@action = ' start_full '
3.查看结果
四:全文查询语法
1.contains:精确的匹配
where contains(*,' "my name is" ') --对短语的精确匹配,注意要有双引号
where contains(*,' "my" or "name is" ') --或者的关系
还有'and not' 'and'
select
title
from
mytable
where
contains
(title,
'
全文
'
)
四:全文查询语法
1.contains:精确的匹配
where contains(*,' "my name is" ') --对短语的精确匹配,注意要有双引号
where contains(*,' "my" or "name is" ') --或者的关系
还有'and not' 'and'
还有临近词和权重 我就不多说了
2.freetext:模糊匹配(你输入swim可以匹配出swam)与contains语法相同
3.containstable
此函数返回一个表
此表包含两个列
一个是key(就是主健啦) 一个是rank(返回的行与搜索结果的匹配程度,越大越精确)
2.freetext:模糊匹配(你输入swim可以匹配出swam)与contains语法相同
3.containstable
此函数返回一个表
此表包含两个列
一个是key(就是主健啦) 一个是rank(返回的行与搜索结果的匹配程度,越大越精确)
select
title
from
mytable p
join containstable (mytable, title , ' xland ' ) ct
on p.id = ct. [ key ]
join containstable (mytable, title , ' xland ' ) ct
on p.id = ct. [ key ]
4.freetexttable与containstable类似
附件:使用旧式语法创建全文索引的例子
附件:使用旧式语法创建全文索引的例子
use
xland
go
-- 检查数据库pubs是否支持全文索引,如果不支持
-- 则使用sp_fulltext_database 打开该功能
if ( select databaseproperty ( ' xland ' , ' isfulltextenabled ' )) = 0
execute sp_fulltext_database ' enable '
-- 建立全文目录FT_xland
execute sp_fulltext_catalog ' FT_xland ' , ' create '
-- 为mytable表建立全文索引数据元
execute sp_fulltext_table ' mytable ' , ' create ' , ' FT_xland ' , ' PK_mytable ' -- 最后一个是主键名
-- 设置全文索引列名
execute sp_fulltext_column ' mytable ' , ' title ' , ' add '
-- 建立全文索引
-- activate,是激活表的全文检索能力,也就是在全文目录中注册该表
execute sp_fulltext_table ' mytable ' , ' activate '
-- 填充全文索引目录
execute sp_fulltext_catalog ' FT_xland ' , ' start_full '
go
-- 检查全文目录填充情况
While fulltextcatalogproperty ( ' FT_xland ' , ' populateStatus ' ) <> 0
begin
-- 如果全文目录正处于填充状态,则等待30秒后再检测一次
waitfor delay ' 0:0:30 '
end
-- 全文目录填充完成后,即可使用全文目录检索
select * from mytable where CONTAINS (title, ' xland ' )
go
-- 检查数据库pubs是否支持全文索引,如果不支持
-- 则使用sp_fulltext_database 打开该功能
if ( select databaseproperty ( ' xland ' , ' isfulltextenabled ' )) = 0
execute sp_fulltext_database ' enable '
-- 建立全文目录FT_xland
execute sp_fulltext_catalog ' FT_xland ' , ' create '
-- 为mytable表建立全文索引数据元
execute sp_fulltext_table ' mytable ' , ' create ' , ' FT_xland ' , ' PK_mytable ' -- 最后一个是主键名
-- 设置全文索引列名
execute sp_fulltext_column ' mytable ' , ' title ' , ' add '
-- 建立全文索引
-- activate,是激活表的全文检索能力,也就是在全文目录中注册该表
execute sp_fulltext_table ' mytable ' , ' activate '
-- 填充全文索引目录
execute sp_fulltext_catalog ' FT_xland ' , ' start_full '
go
-- 检查全文目录填充情况
While fulltextcatalogproperty ( ' FT_xland ' , ' populateStatus ' ) <> 0
begin
-- 如果全文目录正处于填充状态,则等待30秒后再检测一次
waitfor delay ' 0:0:30 '
end
-- 全文目录填充完成后,即可使用全文目录检索
select * from mytable where CONTAINS (title, ' xland ' )