填充全文索引实质上就是更新全文索引,其目的是让全文索引可能够反映最新的数据表内容。
填充全文索引的方式
填充全文索引一共有三种方式:
l 完全填充:完全填充方式通常发生在首次填充全文目录或全文索引时,在前一节中所说到的“启用全文索引”时,就已经对全文索引进行了一次完全填充,以后就可以使用基于更改跟踪的填充和基于增量时间戳的填充来维护全文索引。
l 基于更改跟踪方式的填充:SQL Server会记录设置了全文索引的数据表中修改的行,这些记录存储在日志中,在某个适当时机时将这些更改填入到全文索引中。
l 基于增量时间戳方式的填充:也就是增量填充,在全文索引中更新上次填充之后更新的行。增量填充要求索引表中必须有timestamp数据类型的字段,如果没有该类型的字段,则无法执行增量填充,系统将会以完全填充的方式来取代增量填充方式进行填充。
填充全文索引
由于填充全文索引有三种不同的方式,所以填充全文索引的方法也不相同。如果要以完全填充或增量填充方式来填充全文索引,则只要右击全文索引所在的数据表,在弹出的快捷菜单里选择【全文索引】à【启动完全填充】或【启动增量填充】选项即可。如图14.14所示。
图14.14 填充全文索引
更改跟踪方式填充全文索引分为手动和自动两种方法,在默认情况下是自动填充,如果要更改为手动方式,可以右击全文索引所在的数据表,在弹出的快捷菜单里选择【全文索引】à【手动跟踪更改】选项,如图14.14所示。
选择完毕之后,SQL Server会自动跟踪数据表中的数据更改情况,但并不将其更新到全文索引中,只有在需要将这些更新反应到全文索引上时,右击全文索引所在的数据表,在弹出的快捷菜单里选择【全文索引】à【应用跟踪的更改】选项后,才会将更新反应到全文索引上。
如果在图14.14所示界面里选择了【自动跟踪更改】选项,则由SQL Server自动将记录的数据表的更改更新到全文索引中,不再需要人工进行填充。
如果在数据库中有多个数据表创建了全文索引,可以使用重新生成索引目录的方法将所有的全文索引进行完全填充,其方法如下:
(1)在【对象资源管理器】窗口里展开树形目录,定位到【服务器】à【数据库】à【Northwind】à【存储】à【全文目录】。
(2)右击【全文目录】,在弹出的快捷菜单中选择【全部重新生成】选项。
(3)在弹出的【重新生成所有全文目录】对话框里单击【确定】按钮完成操作。
14.6.3 定时填充全文索引
在SQL Server 2005中,可以为填充全文索引设置计划,让系统自动定时填充全文索引,其方法如下:
(1)右击全文索引所在的数据表,在弹出的快捷菜单里选择【全文索引】à【属性】来查看全文索引的设置,如图14.12所示,在该图中选择【计划】选项。
(2)弹出如图14.15所示全文索引填充计划对话框,在该对话框中单击【新建】按钮。
图14.15 全文索引填充计划对话框
(3)弹出如图14.16所示的【新建全文索引表计划】对话框。
l 在【名称】文本框里可以输入该计划名称。
l 在【计划类型】下拉列表框里,可选项有“SQL Server代理启动时自动启动”:也就是在SQLServer代理启动时自动填充全文索引;“CPU空闲时启动”:也就是当CPU空闲时填充全文索引;“执行一次”:在指定时间时填充全文索引,只填充一次;“重复执行”:可以设定多次填充全文索引的方式。
l 如果选中【已启用】复选框,则启用该填充全文索引的计划。
l 在【执行一次】区域里,可以设置计划类型为“执行一次”的执行时间,在到达该时间时,自动填充全文索引。
l 在【频率】区域里,可以设置计划类型为“重复执行”的执行频率。在【执行】下拉列表框里可选择项为“每天”、“每周”和“每月”,分别用于指定每天、每周和每月执行填充计划的频率。
l 在【持续时间】区域里可以设置该计划的开始日期与结束日期,其中结束日期可以设置为无结束日期,也就是永远执行下去。
图14.16 【新建全文索引表计划】对话框
(4)设置完毕后单击【确定】按钮完成计划设计,返回如图14.17所示对话框。
图14.17 全文索引填充计划对话框
(5)在如图14.17所示对话框里,可以选择全文索引填充计划所要执行的填充方式,设置完毕后单击【确定】按钮完成操作。
注意:如果单击【确定】按钮之后出现如图14.18所示的失败对话框,请先安装SQL Server 2005SP1(下载地址为:http://www.microsoft.com/downloads/details.aspx displaylang=zh-cn&
FamilyID=cb6c71ea-d649-47ff-9176-e7cac58fd4bc),然后再安装版本为9.0.2153的SQL Server2005累积修补程序包(下载地址为:http://support.microsoft.com/kb/918222/zh-cn)。
图14.18 添加计划失败对话框
使用类似的方法也可以定时填充全文目录:
(1)右击全文目录名,在弹出的快捷菜单里选择【属性】选项。
(2)在弹出的如图14.4所示的【全文目录属性】对话框里选择【填充计划】选项。
(3)弹出与14-15所示的填充计划对话框,其添加计划的步骤与创建全文索引的填充计划几乎相同,在此就不再赘述了。
-----------------------------------------------------------------
http://topic.csdn.net/u/20091010/00/5e59f87b-fa23-46ed-9551-dcc9240e169f.html
难题困扰:
1,有100万记录的表main_source(ms_id,标准地址)
2,已启用了sql 全文搜索功能,在标准地址上建立了全文索引。
3,我想检索地址中含有4的地址(例如:****4路13号,*****路4栋4楼),以下任何其中一条语句竟然返回空集合,(事实上存在几万条这样的记录)。
select 标准地址 from main_source where contains(标准地址,"4")
select 标准地址 from main_source where contains(标准地址,""4"")
select 标准地址 from main_source where contains(标准地址,""4*"")
4,但如果执行以下语句,有数据返回
select 标准地址 from main_source where contains(标准地址,"40")
答案:
噪音问题,SQL SERVER过滤了一些他认为无用的字符。。
你直接把下面这个文件里在的0-9的内容删除就行了。
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noiseCHS.txt
-------------------------------------------------------------------
http://blog.csdn.net/fredrickhu/archive/2009/09/20/4574214.aspx
-------------开启全文索引和创建全文索引目录
exec sp_fulltext_database "enable"
--exec sp_fulltext_catalog "gf_ft","drop"
exec sp_fulltext_catalog "gf_ft","create"
-------------为news表创建全文索引 可索引列为 title,abstract,text
exec sp_fulltext_table "product","create","gf_ft","pk_product"
exec sp_fulltext_column "product","productname","add"
-------------激活索引
exec sp_fulltext_table "product","activate"
exec sp_fulltext_table "product","start_full"
--检查全文目录填充情况
While fulltextcatalogproperty("gf_ft","populateStatus")<>0
begin
--如果全文目录正处于填充状态,则等待5秒后再检测一次
waitfor delay "0:0:5"
END
exec sp_fulltext_catalog "gf_ft","start_full"
--检查全文目录填充情况
While fulltextcatalogproperty("gf_ft","populateStatus")<>0
begin
--如果全文目录正处于填充状态,则等待5秒后再检测一次
waitfor delay "0:0:5"
END
--------------测试------------------
SELECT * FROM product WHERE CONTAINS(productname,"美赞臣")
-----------------------卸载------------------
EXEC sp_fulltext_table "product","deactivate"
exec sp_fulltext_column "product", "productname", "drop"
EXEC sp_fulltext_table "product", "drop"
EXEC sp_fulltext_catalog "gf_ft", "stop"
EXEC sp_fulltext_catalog "gf_ft", "drop"
2.
先了解一下全文索引是如何创建和使用的
创建全文索引:
在MS SQL SERVER 2005里,全文索引是一个单独的服务项,默认是启动的,但是没有允许数据库启用全文索引,如果要在某个数据库中创建全文索引,先要启用数据库的全文索引.
启用方法:
1.数据库->属性->常规->启用全文索引
2.在查询中执行:sp_.........忘了,如果没有启用就执行创建索引目录,会提示.
启用了索引了,就可以创建索引目录了
在查询中执行以下语句:
CREATE FULLTEXT CATALOG 索引目录名
执行以后,就会在SQL SERVER的安装目录里看到一个同名的目录名了,路径为MSSQL.1/MSSQL/FTDATA/索引目录名
每个表只可以有一个全文索引,存放在指定的索引目录里,可以通过向导创建,也可以通过SQL创建
基本语法:
CREATE FULLTEXT INDEX ON tablename
(索引列1,索引列2...)
KEY INDEX indexname ON 索引目录名
indexname是指已存在的基于指定表的唯一索引名.而不是唯一索引列名.如果索引不存在,需要先创建唯一索引.
使用全文索引:
主要使用CONTAINS,FREETEXT进行查询
假设已有一个表music,已为字段memo创建全文索引,那么要查询含有周杰伦或者jay的所有记录的语句为:
SELECT * FROM music WHERE CONTAINS(memo,""周杰伦" or "jay"")
也可以使用匹配模式进行包含条件组合,还可以使用and连接条件.
类别: sql ado 存储过程 查看评论