易网中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4884|回复: 1

[MSSQL] SQL2000创建全文索引,最全最好方法 [复制链接]

Rank: 7Rank: 7Rank: 7

发表于 2011-6-21 21:45:22 |显示全部楼层
本帖最后由 淘淘 于 2011-6-21 22:45 编辑

如何在SQL2000下创建全文索引




一、检查是否安装Microsoft Search服务

注意:只有sql2000企业版才有全文检索功能【sql2005没有测试过】,如果你是sql个人版根本就无法安装和开启Microsoft Search 服务!
检查方法有两种:

1. 通过储存过程FULLTEXTSERVICEPROPERTY(返回有关全文服务级别属性的信息)来验证搜索服务(全文组件)是否安装。
  在查询分析器里输入:Select fulltextserviceproperty ('IsFullTextInstalled')
  返回1表示已安装全文组件;返回0表示未安装全文组件;返回Null表示输入无效或发生错误,如下图,表示组件已经装好了!




2. 启动 Microsoft Search 服务
  开始菜单-->SQL程序组-->服务管理器-->服务-->下拉筐-->Microsoft Search 服务-->启动它
  ---如下图,就表示Microsoft Search 服务已经启动了。




二、如何创建全文索引

1. 在企业管理器中展开要建立全文索引的数据库Test,右击“全文目录”,选择“新建全文目录”如下图所示。




可以修改全文目录的路径,通过将全文目录放在单独的磁盘或磁盘阵列可以提高效率。
建议不要对整个全文目录进行任何形式的填充调度。




2. 为表添加全文索引。
  全文索引不能建立在视图上,只能建立在有唯一索引(主键也是唯一索引)的基础表上。
  下图演示如何对表建立全文索引。演示中的 t_fulltext 表的建表及初始化数据的脚本如下:
create table t_fulltext
(
rid int identity(1,1),
title varchar(256) not null,
writetime datetime default(getdate())
)
go
alter table t_fulltext add constraint pk_fulltext primary key (rid)
go

---初始化数据
insert into t_fulltext(title) values('山东蓬莱河西金矿透水事故1人死亡3人失踪(21:29)')
insert into t_fulltext(title) values('评论:野蛮公交莫成城市丑陋形象代言人(13:27)')
insert into t_fulltext(title) values('台媒体称当局与民间企业对立非民众之福(12:50)')
......



3. 出现的欢迎界面如图





4. 为全文索引选择唯一索引,如图




【注意:表的唯一索引推荐使用主键,且一定为单列】




5. 选择全文索引的列,注意一张表只能建一个全文索引。建议不要选择断词的语言,这样实际会使用默认的断词语言。
  通过查询分析器运行:sp_configure 'default full-text language' 可以得出结果,如图所示:



可以查看默认的断词语言,如我的机器上运行上条语句,config_value 值是 2052 它表示简体中文。
其它代码所表示的语言可以查阅Book Online的“default full-text language”关键词。

由于SQL Server对中文断词并不是很高明,因此并不能依靠SQL Server带给您非常智能的搜索,这意味着您的全文搜索结果,可能有不希望出现的记录,或您希望出现的记录没有出现。




6. 将表指派到全文目录,如图 所示,也可以通过此界面创建新目录。





7. 接下来会提示对表进行 填充调度,为能够准实时地把基表的全文索引列的修改(增、删、改)准实时地应用到全文索引,建议使用下面介绍的其它方法进行索引维护。

  如图7 所示,建议不要在这里添加任何调度,直接点击“下一步”。如果数据不会再修改,则在一次完全填充以后,不用再增加其它类型的表级填充。
  如果实施到本步骤,不再添加任何形式的表调度,那么基表数据的更新,将不能更新到全文索引。


这里推荐不添加任何调度,而是采用准实时更新全文索引的方式,直接点下一步即可!




8. 如图所示出现的完成界面提示中点击“完成 ”,请稍微等待直到出现下一界面





9. 在如图所示的界面中点击“确定”。

  由于尚未在表上添加任何调度,因此还需要继续设置。





10. 在企业管理器中右击 f_fulltext 表,如 图所示,选中“更改跟踪”。
  选中更改跟踪后,以后对基表数据的修改,才能反映到全文索引中。




注意:一定要在开始整个目录的完全填充之前选中 [更改跟踪]




特别注意:一旦选中“更改跟踪”,根据经验,其实是必须对该表进行完全填充的。
如果是在线使用的全文索引数据库,选中“更改跟踪”会导致性能迅速下降,导致全文索引无法使用。

11. 在企业管理器中右击 f_fulltext 表,如图 所示,选中“更新后台中的索引”。

  到本步,全文索引就完全完成了。由于我们选中了“更改跟踪”,此时实际已经开始了表的完全填充。




12. 可以通过双击下图中的 全文目录 下的全文索引 zhiweikeji 来查看该全文目录的属性




如下图所示,状态为“空闲”,而项目计数大于0,则表示完全填充已经完成了。





三、如何使用全文索

1. 全文索引查询建议使用 CONTAINS 谓词进行查询。
  select * from t_fulltext where contains(title,'3')
  则会报如下错误:
  服务器: 消息 7619,级别 16,状态 1,行 1
  全文操作运行失败。查询子句只包含被忽略的词。使用下面的语法,能避免出现错误,且能够确实查询出正确的记录。

  select * from t_fulltext where contains(title,'"*3*"')
  下面是输出结果:



  2 评论:野蛮公交莫成城市丑陋形象代言人(13:27)
  1 山东蓬莱河西金矿透水事故1人死亡3人失踪(21:29)
  (所影响的行数为 2 行)

  select * from t_fulltext where contains(title,'代言人')
  下面是输出结果:




  2 评论:野蛮公交莫成城市丑陋形象代言人(13:27)
  (所影响的行数为 1 行)

2. 索引使用实例

  Contains,AND, or, NOT



  可以在Contains中很方便使用逻辑表达式,比如:
  Select * from t_fulltext where contains(title,'"山东" AND "泰国"')
  Select * from t_fulltext where contains(title,'"山东" or "泰国"')
  Select * from t_fulltext where contains(title,'"山东" AND NOT "泰国"')

  NEAR



  这是一个在普通的逻辑表达式中没有的关键字,意思是很简单,就是说找到靠近的两个词比如:
  Select title from t_fulltext where contains(title,'"泰国" NEAR "广西"')
  这就表示要找到全文中包含泰国和广西,并且两个词相隔不远。

  ContainsTable



  它的使用方式和Contains基本相同,这里就不再重复介绍了。要提到的是它返回的是一张供你进一步查询的表,而不是一个查询条件。

  FreeText



  如果使用这种方式,那么查询的时候会使用分词技术来实现模糊查询,并且过滤掉一些非关键词,比较类似于Contains中的FORMSOF,可惜对中文也没有什么支持
    比如:
  Select title FROM t_fulltext Where FREETEXT (title, '代言人' )
  FreeTextTable 它和FreeText的差别就跟Contains和ContainsTable的差别一样。
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 2

发表于 2011-7-16 11:00:33 |显示全部楼层
写这不容易,顶一下啊
九博机械包装机、灌装机、封口机 http://www.jbbzj.net http://www.jbgzj.net http://www.jbfkj.net

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|ewcn.net ( 冀ICP备09046650号 )

GMT+8, 2012-5-20 04:12 , Processed in 0.097208 second(s), 14 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部