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

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

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

51Testing软件测试网L"ygo8ka v

1、启动Microsoft Search服务51Testing软件测试网 @1Ok-^!Q0c
   开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft Search 服务-->启动它51Testing软件测试网3p5t"w~B1z
51Testing软件测试网.]+dY Pp"BB%Z&Gj
2、..\Microsoft SQLServer\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空
Wbyfe1b0   noise.chs文件。注:里面写的是忽略词,如果没有这个文件的话,将无法进行中文检索   
DIPC\Y W0
P!@~$^ Q{y4KIk03、建立环境51Testing软件测试网:{&d'GLn.Nb;xc,H2M
   打开查询分析器-->执行下列脚本:    
-?? L;}K@"p5R)NR0   create database test                                --创建test数据库51Testing软件测试网0z] zNR T xb
   use test                                            --选择test数据库   
?1] bQy@0   create table search (ID int not null primary key,51Testing软件测试网0OGe#QIT
          MyImage image,FileType varchar(255),51Testing软件测试网t`1M];dZ0g;\Xv
          FileName varchar(255))                       --创建search表    
0k&h#cHD$HpR.gx0  ※ search表中Id,MyImage,FileType三列是必须的,因为要对image列索引的话,51Testing软件测试网:`t!\"IZ[B!^#\tt
    必须要有一个主键列,一个image列,一个存放文件类型的列    51Testing软件测试网 F&J v){{4M'? Lr
  ※ 我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放文件
&Ka+a@$y0    的扩展名    
4q9Z ~`q QV-o)@|:?o0  ------------------------------------------------------------------------------    
lp5l*gb$AE;Gn0  sp_fulltext_database 'enable'               --为全文索引启用数据库  51Testing软件测试网R`"B6K5s*C4N
  sp_fulltext_catalog  'My_Search','create'   --创建一个叫My_FullDif的全文目录   
P Q0f9`/ZU-@A0  declare @Key sysname; 51Testing软件测试网4F*s+KQQ uaV
  select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c
~k'JBc^M0  where  a.id=object_id('search') and a.name='ID' and a.id=b.id51Testing软件测试网;jkJ1i$K,a}0bIw,j*`
         and b.constid=c.id51Testing软件测试网)l2qi4k6]&r
         and c.name like 'PK%'                 --取得主索引    51Testing软件测试网my ne'|Q}-^9P-? k
  exec sp_fulltext_table 'search','create','My_search',@Key

oS| \ t051Testing软件测试网TJ`S-ta xfQ

  ※ 为Search表创建全文索引的元数据,并且指定该表的全文索引数据应该驻留在My_Search中。
D[%}-dA;Y#mN(O0    该动作还将@key的用法指派为全文键列。51Testing软件测试网(D[N$DnT
  ※ 这个唯一的索引必须已经存在,并且必须在表的某个列上已经定义。 
jf7Q8s~3Q%j0  -------------------------------------------------------------------------------   
1MO'@~6W/}3l5Gd0  sp_fulltext_column 'search','MyImage','add',0x0804,'FileType' 
M#fd;u&a0  ---这句是指定MyImage列为全文索引列,FileType是类型列51Testing软件测试网'V(C/w5H"tI`#_h d X A

2P`D#XB]1S"YN04、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名51Testing软件测试网 Aaa:A7F?gHY
   为htm的网页文件,1个扩展名为bmp的图片      51Testing软件测试网X/KI R F A`U
51Testing软件测试网m.Op%{hv^2L T
5、
插入数据
0R/^/s \:R/d7O/^0   建立下面这个存储过程   
z/O;Iamv w0  --------------------------------------------------------------------------------  51Testing软件测试网]l:W7])B/C!F}0D
  CREATE   PROCEDURE   sp_textcopy    
#g~4IF;?:n{0      @srvname      varchar(30),  
?nh8N5q2dx0      @login        varchar(30),
;M)jHH.p0      @password     varchar(30),     
w[ m/a(R0      @dbname       varchar(30),     
q})cE~y0      @tbname       varchar(30),     51Testing软件测试网4v4?-`s T;Xq]'e
      @colname      varchar(30),     51Testing软件测试网9Wsb2^U
      @filename     varchar(30),     51Testing软件测试网 jq"R+]rTT/t P
      @whereclause  varchar(40),     51Testing软件测试网Zr1O+OC T(e
      @direction    char(1)     
6?O0R)Qtt9M0  AS       51Testing软件测试网?y!d\8W&l
  DECLARE @exec_str  varchar (255)     
~_*W#G5NX0H4NN0  SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password
| @$k4b&@.N0         +' /D '+@dbname+' /T '+@tbname+' /C '+@colname+' /W "'+@whereclause
pITq+dMxv3?0         +'"/F '+@filename+' / '+@direction   51Testing软件测试网K"RkML)F nw(H
51Testing软件测试网aU0O,SS.K
  EXEC  master..xp_cmdshell   @exec_str   51Testing软件测试网$X ?1[ pN
  ----------------------------------------------------------------------------------51Testing软件测试网 A8F-F'A{8qRk
  insert search values(1,0x,'doc','word文档')
A-W;j!{f4il0  ※ 其中第二列是0x,它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,51Testing软件测试网 T5[ |!v0ID
    即扩展名
,xd7xs;qW0  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\大力的51Testing软件测试网 x-yLG0rP
               doc.doc','where ID=1','I'   --注意条件是   ID=2      
Q9OcFKQ0  ※ 依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必51Testing软件测试网 J,y1s0C_K.]9R
    须保证它只选择一行)51Testing软件测试网*zKP3A2S`W%k&F1z
  insert search values(2,0x,'bmp','图片')  
C3sU6CHC3X%}"X0  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\图51Testing软件测试网c-{1W4I`1I
              片.bmp','where ID=2','I'     --注意条件是   ID=2
)u Scho0  insert search values(3,0x,'xls','Excel文件') 
-P kP'a(j5G5T3\0  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\Excel文
)p_ g XSy]0              件.xls','where ID=3','I'     --注意条件是   ID=3
r4[9^;t.E0  insert search values(4,0x,'htm','网页')   
(BOvZdZR5W0  sp_textcopy '你的服务器名','sa','你的密码','test','search','MyImage','c:\网
K;SD%]c0               页.htm','where ID=4','I'     --注意条件是   ID=4          
"ES#h_o{b0  ※ 如果报textcopy不是可执行文件的话,则MSSQL\Binn下的textcopy.exe拷贝到Tools\Binn下,51Testing软件测试网t5P yQg&Br yA
    例如:C:\Program Files\Microsoft SQL Server\MSSQL\Binn目录下拷备 textcopy.exe到:51Testing软件测试网gi },Jz#Y-p
         C:\Program Files\Microsoft SQL Server\80\Tools\Binn
|pf)xQ hwL0 51Testing软件测试网T{X$|,`
6、填充全文索引   51Testing软件测试网VX9~f zN)H%v m9u
   sp_fulltext_table 'search','start_full'   ---第一个参数是表名,第二个参数是51Testing软件测试网;r?GHX"@
   启动表的全文索引的完全填充51Testing软件测试网S4s"p&f(o U
51Testing软件测试网/O/i;E kx$z-cMB
7、可以进行检索51Testing软件测试网u5y&{W3@S&\-P!I
   select * from search where contains(MyImage,'J老师')
^8hXah0   ※ 用到CONTAINS、Freetext51Testing软件测试网Za2Q#x/k._1Q
   ※ 注意分词功能51Testing软件测试网'u H7?ifGtD


TAG: SQL 全文索引

 

评分:0

我来说两句

Open Toolbar