naotang的测试成长空间,记录工作中的问题,学习中的心得。 个人网站:www.naotang.com

如何使用sql的全文检索功能

上一篇 / 下一篇  2007-10-09 17:09:46 / 个人分类:数据库

$^j*a g5r*i@01、启动Microsoft Search服务
[n'm X.~6p G4jx0   开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft Search 服务-->启动它51Testing软件测试网 v0e$cvVspw

&[J;} HUNxf'[;d02、..\Microsoft SQLServer\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空
*A)eX&t nuD0   noise.chs文件。注:里面写的是忽略词,如果没有这个文件的话,将无法进行中文检索   
8T g p"ekg&hx ^:`051Testing软件测试网1z"BMU"{%O.fn(V9L+K2l
3、建立环境51Testing软件测试网,nyBzuOC m q7aq
   打开查询分析器-->执行下列脚本:    
6P RR,v]8DhK^0   create database test                                --创建test数据库51Testing软件测试网,v|HFZ\ hq"`6II
   use test                                            --选择test数据库   51Testing软件测试网Z1HSXh gk MF
   create table search (ID int not null primary key,
Y$s xr6`c b0          MyImage image,FileType varchar(255),51Testing软件测试网q!^P2|x_
          FileName varchar(255))                       --创建search表    51Testing软件测试网U#jsC&T4{q
  ※ search表中Id,MyImage,FileType三列是必须的,因为要对image列索引的话,
cp9w5QfP^i-W*Fs0    必须要有一个主键列,一个image列,一个存放文件类型的列    51Testing软件测试网3Z] ZB,U9B)`5jojofv
  ※ 我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放文件51Testing软件测试网 _/}6gUv(s3M|'^
    的扩展名    
*l3l mqn#}3xM0  ------------------------------------------------------------------------------    
o6@.X4v'_:qf6@Dnj0  sp_fulltext_database 'enable'               --为全文索引启用数据库  
+[ MM.@ IJc4M*R0  sp_fulltext_catalog  'My_Search','create'   --创建一个叫My_FullDif的全文目录   
G x2x,J?0  declare @Key sysname; 51Testing软件测试网2j2aM+hs$M6B-d7~
  select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c
z$S,s.i%vf9{&t0  where  a.id=object_id('search') and a.name='ID' and a.id=b.id
&qFA_/SD5G2G;K0         and b.constid=c.id
.\K+rUc7c0`S0         and c.name like 'PK%'                 --取得主索引    
] hg}-[lp0T-Ct0  exec sp_fulltext_table 'search','create','My_search',@Key51Testing软件测试网L&E V?L

51Testing软件测试网$h2w|c5_'e"C+L2Y4bZD|{ t

  ※ 为Search表创建全文索引的元数据,并且指定该表的全文索引数据应该驻留在My_Search中。
\YX8}r [S [vh4Mg0    该动作还将@key的用法指派为全文键列。
$T-L WZs{*N9R0  ※ 这个唯一的索引必须已经存在,并且必须在表的某个列上已经定义。 
#w&ukn]zs0  -------------------------------------------------------------------------------   
3my5uE6_'e0  sp_fulltext_column 'search','MyImage','add',0x0804,'FileType' 51Testing软件测试网?/S S"n@.R O
  ---这句是指定MyImage列为全文索引列,FileType是类型列
&ZI}4]/]@L R\Q0
^4^Cz V4D we04、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名
cT9HV-t @0   为htm的网页文件,1个扩展名为bmp的图片      
~Sn(S.Da|V,~'L:W0
[j#q8hB)X1M05、
插入数据51Testing软件测试网0xx'B:w3E0@x9e
   建立下面这个存储过程   51Testing软件测试网:I)t:z QU
  --------------------------------------------------------------------------------  51Testing软件测试网8FyrFQ F|
  CREATE   PROCEDURE   sp_textcopy    
rQi#G8DGF0      @srvname      varchar(30),  
4Z-R;LOm|0      @login        varchar(30),
EA#r+cl`0      @password     varchar(30),     
,[2W| RyH _0ws$j0      @dbname       varchar(30),     51Testing软件测试网Uueryg ?*T2j
      @tbname       varchar(30),     51Testing软件测试网v _~!x7Ue{ V$I
      @colname      varchar(30),     51Testing软件测试网R1z.~V~
      @filename     varchar(30),     
!ye#Ln+a-q(RJ%j I0      @whereclause  varchar(40),     
v O,~&p Dpt cI0      @direction    char(1)     51Testing软件测试网&ad8G5Fu
  AS       
3`3h,pw$w$G1h,f0  DECLARE @exec_str  varchar (255)     
7Eup4|9Ur*Y*a-h0  SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password51Testing软件测试网DH2dl#ne ydp
         +' /D '+@dbname+' /T '+@tbname+' /C '+@colname+' /W "'+@whereclause
Da#io5|c'F0         +'"/F '+@filename+' / '+@direction   
q9D*@[bP']0
#Usb i(K0  EXEC  master..xp_cmdshell   @exec_str   51Testing软件测试网g$?[5lb:iIq a'KO
  ----------------------------------------------------------------------------------
L9NX!pjO(s0  insert search values(1,0x,'doc','word文档')51Testing软件测试网$i$H0h+|f'{|
  ※ 其中第二列是0x,它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,51Testing软件测试网A9A![|m:t|]r
    即扩展名51Testing软件测试网YkM(V6b~ F
  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\大力的
l5E#hGV%vAYh0               doc.doc','where ID=1','I'   --注意条件是   ID=2      51Testing软件测试网-rO1d1\WgH4y^%M
  ※ 依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必
Y3\+f4t@)P$w+u%t K0    须保证它只选择一行)
'[:e*Cu` uacV~0  insert search values(2,0x,'bmp','图片')  51Testing软件测试网h,^uzE-S:I
  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\图
%q^"E5j2qg0J0              片.bmp','where ID=2','I'     --注意条件是   ID=251Testing软件测试网 Q@Nu#Gw$Bc
  insert search values(3,0x,'xls','Excel文件') 
]8@9iP{L Gm#d0  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\Excel文51Testing软件测试网kz.|^[ fa_+I
              件.xls','where ID=3','I'     --注意条件是   ID=3
&o#R&{,LFb U0  insert search values(4,0x,'htm','网页')   51Testing软件测试网6k,]R| E-C
  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\网51Testing软件测试网f3`6gc%p;t7_7F@
               页.htm','where ID=4','I'     --注意条件是   ID=4          51Testing软件测试网NvF8w}[s6@6c
  ※ 如果报textcopy不是可执行文件的话,则MSSQL\Binn下的textcopy.exe拷贝到Tools\Binn下,51Testing软件测试网q"I0IR/FJ
    例如:C:\Program Files\Microsoft SQL Server\MSSQL\Binn目录下拷备 textcopy.exe到:
Dcbc|XVr|0         C:\Program Files\Microsoft SQL Server\80\Tools\Binn51Testing软件测试网2S4m3j \;EN _Lm;aU[t
 51Testing软件测试网1fx*}/bB
6、填充全文索引   51Testing软件测试网7i0X-G?d
   sp_fulltext_table 'search','start_full'   ---第一个参数是表名,第二个参数是
,DP9m#~BA.SK0   启动表的全文索引的完全填充51Testing软件测试网0MLp1B_ Kdgc}`

Jn%_ K.zy5nj,i07、可以进行检索
9[{1K4Oz_X0   select * from search where contains(MyImage,'J老师')
an$GW6vh2s3j0   ※ 用到CONTAINS、Freetext51Testing软件测试网jv$aK*M0Of_n
   ※ 注意分词功能

$L(Dr5oy`0

TAG: SQL 全文索引

 

评分:0

我来说两句

Open Toolbar