全文索引image列,全攻略!
今天“百年不遇”的停电了,看了一天书。晚上搞了一下全文索引,决定把心得贴出来,我尽量写的详细,大家共同学习,欢迎指正!
1、启动 Microsoft Search 服务
开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft Search 服务-->启动它
2、
..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件
非空noise.chs文件,也有人说是空的noise.chs文件,但我每次都往里写几个没用的字母。
3、建立环境
打开查询分析器-->执行下列脚本:
--------------------------------------------
create database test ---创建test数据库
use test ---选择test数据库
create table dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---创建dali表
--dali表中 Id,MyImage,FileType 三列是必须的,因为要对image列索引的话,必须要有一个主键列,一个image列,一个存放文件类型的列
--我们知道在windows系统中文件类型是靠扩展名来区分的所以FileType列也就是用来放 文件的扩展名
--------------------------------------------
sp_fulltext_database 'enable' --为全文索引启用数据库
sp_fulltext_catalog 'My_FullDir', 'create' ---创建一个叫My_FullDif的全文目录
declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('a') and a.name='a' and a.id=b.id and b.constid=c.id and c.name like 'PK%'
exec sp_fulltext_table 'dali','create','My_FullDir',@Key ----这两句是为全文索引,对表进行标记
sp_fulltext_column 'dali','MyImage','add',0x0804,'FileType' ---这句是指定MyImage列为全文索引列,FileType是类型列
------------------------------------------------
4、在c盘下放一个扩展名为doc的word文件,一个扩展名为xls的excel文件,一个扩展名为htm的网页文件,个扩展名为bmp的图片
共4个,大家可根据实际情况放入!
5、插入数据
建立下面这个存储过程
--------------------------------------------------
CREATE PROCEDURE sp_textcopy
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1)
AS
/* 这是使用textcopy工具将文件插入到数据库中,如果有前台工具可以用前台开发工具将文件插入,这里为了演示 */
DECLARE @exec_str varchar (255)
SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password+' /D '+@dbname+' /T'+@tbname+' /C '+@colname+' /W"'+@whereclause+'" /F"'+@filename+'" /'+@direction
EXEC master..xp_cmdshell @exec_str
----------------------------------------------------
insert dali values(1,0x,'doc','大力的doc') ---其中第二列是 0x 它是一个16进制数对应image列,是必须的,不要写null,第三列是文件类型,既扩展名
sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\大力的doc.doc','where ID=1','I'
-------依次参数是:实例名,用户名,密码,数据库名,表名,image列名,路径及文件名,条件(你必须保证它只选择一行),I
---------------------------------------------------------------------------------------------------------------------
insert dali values(2,0x,'bmp','图片')
sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\图片.bmp','where ID=2','I' --注意条件是 ID=2
insert dali values(3,0x,'xls','Excel文件')
sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\Excel文件.xls','where ID=3','I' --注意条件是 ID=3
insert dali values(4,0x,'htm','网页')
sp_textcopy '你的服务器名','sa','你的密码','test','dali','MyImage','c:\网页.htm','where ID=4','I' --注意条件是 ID=4
----------上面的语句,要保证类型一样,路径正确,条件唯一正确应该就可以了
6、填充全文索引
sp_fulltext_table 'dali','start_full' ---第一个参数是表名,第二个参数是启动表的全文索引的完全填充
7、可以开始你的实验了
select * from dali where contains(MyImage,'J老师')
select * from dali where contains(MyImage,'海老师')
------END----------
--调试环境:SQLServer2K、Windows2Kas
问题点数:300、回复次数:54Top
1 楼jiezhi(风满袖)回复于 2003-03-30 01:40:08 得分 5
no.1Top
2 楼jiezhi(风满袖)回复于 2003-03-30 01:41:23 得分 5
建议还是去研究oracle和db2吧
嘻嘻嘻Top
3 楼jiezhi(风满袖)回复于 2003-03-30 01:41:39 得分 0
:)Top
4 楼zqllyh(学习Stupid As Pig中...)回复于 2003-03-30 19:34:47 得分 10
大力的做法值得尊敬Top
5 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-03-30 19:37:34 得分 10
好 我也不太熟悉 学习了Top
6 楼jiezhi(风满袖)回复于 2003-03-30 20:27:27 得分 0
http://www.csdn.net/develop/read_article.asp?id=17137Top
7 楼nik_Amis(...)回复于 2003-03-30 20:44:35 得分 10
upTop
8 楼mengfan8868(独孤求败)回复于 2003-03-30 21:30:45 得分 10
学习了Top
9 楼j9988(j9988)回复于 2003-03-30 21:40:43 得分 10
学习学习Top
10 楼sysu(死树)回复于 2003-03-30 23:00:53 得分 10
studyTop
11 楼ToUpdate(老六)回复于 2003-03-31 00:23:03 得分 10
太厉害了...Top
12 楼yoki(小马哥--鬓微霜,又何妨)回复于 2003-03-31 08:58:16 得分 10
学习中,勿扰!Top
13 楼renzhm(戴尔飞)回复于 2003-03-31 09:02:09 得分 5
感谢!学习...Top
14 楼chpeng(海鸥)回复于 2003-03-31 09:04:32 得分 5
学习Top
15 楼yingzhi110(水樱花)回复于 2003-03-31 11:36:01 得分 5
问个愚蠢的问题:SQLServer2K是指什么?Windows2Kas又是什么?和win2000和sql server 2000不同吗?
Top
16 楼leimin(黄山光明顶)回复于 2003-03-31 11:48:50 得分 10
GOOD !STUDYTop
17 楼newdongkui(孤独的老乌鸦)回复于 2003-03-31 11:52:49 得分 5
大力真是好人,我要认真学习以及大力的精神Top
18 楼chpong(海鸥)回复于 2003-03-31 11:53:19 得分 5
very good,学习Top
19 楼DJMPH(冷开水)回复于 2003-03-31 12:02:09 得分 5
鼓励。Top
20 楼CrazyFor(冬眠的鼹鼠)回复于 2003-03-31 12:46:20 得分 10
学习!!
有空再好好看看。:)Top
21 楼teaism()回复于 2003-03-31 12:48:13 得分 5
MARK!Top
22 楼gengwei80(书生)回复于 2003-03-31 12:57:36 得分 5
学习!!Top
23 楼huxin1012(fox)回复于 2003-03-31 12:58:24 得分 5
学习!!Top
24 楼zzhuz(大件)回复于 2003-03-31 12:59:58 得分 5
学习Top
25 楼wenhao676(zzc)回复于 2003-03-31 13:42:14 得分 5
good good study on csdn day day up
stu.....ingTop
26 楼hjhing(winding)回复于 2003-03-31 16:26:29 得分 10
收藏先!Top
27 楼covis(烂Covis冒充程序员)回复于 2003-03-31 16:29:49 得分 5
学习!!
收藏!!!
Top
28 楼tj_dns(愉快的登山者)回复于 2003-03-31 17:13:36 得分 10
收藏。Top
29 楼pengdali()回复于 2003-03-31 17:32:12 得分 0
这里改一下:
declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('dali') and a.name='ID' and a.id=b.id and b.constid=c.id and c.name like 'PK%' ---找到索引的名字
exec sp_fulltext_table 'dali','create','My_FullDir',@Key ----这两句是为全文索引,对表进行标记Top
30 楼wgy2008(北极光)回复于 2003-03-31 18:34:26 得分 5
学习!Top
31 楼defender(铜墙铁壁)回复于 2003-03-31 18:37:58 得分 5
upTop
32 楼gaobochina(皮皮)回复于 2003-03-31 18:45:18 得分 5
帅!!!多来几次
Top
33 楼Haiwer(海阔天空)回复于 2003-04-01 08:21:06 得分 10
学习!!
收藏!!
Top
34 楼mmkk()回复于 2003-04-01 09:39:39 得分 5
Got it!Top
35 楼henryzc(hoho)回复于 2003-04-01 10:31:03 得分 5
upupupupupupupTop
36 楼Chiff(~o~)回复于 2003-04-01 10:49:16 得分 10
郁闷,我的版本没有全文索引...Top
37 楼Chiff(~o~)回复于 2003-04-01 10:51:11 得分 5
向大力学习.Top
38 楼andyzq(小强)回复于 2003-04-01 15:09:56 得分 5
收藏!
Top
39 楼ben988211(???)回复于 2003-04-01 15:12:35 得分 5
收藏!Top
40 楼lizongqi(英雄啊)回复于 2003-04-01 15:25:07 得分 5
收藏ing...Top
41 楼linday(林)回复于 2003-04-01 16:38:05 得分 5
强人。。。Top
42 楼caiyunxia(夏才云)回复于 2003-04-01 19:15:31 得分 5
致敬!!!!!
希望多几个大力!!!
收藏Top
43 楼benxie(结婚是幸福的!为了老婆努力赚钱!)回复于 2003-04-02 06:33:00 得分 5
不错呀。
难得大力有时间。
謝了。收藏。Top
44 楼dongquestion(书山有路勤为径)回复于 2003-04-02 09:22:52 得分 5
先保存,后收藏Top
45 楼Napoleo(Leo)回复于 2003-04-02 09:55:38 得分 5
纷纷Top
46 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-04-02 10:44:14 得分 5
试了一下,不错
有几个问题:
1 好像那个noise.chs文件没起到什么作用
2 如果对文件进行了更改, 希望再用全文索引查询, 需要重新导入表中
3 image类型还是有长度限制,我用textcopy导入一个大的doc文件时提示出错,只能分割放入
4 我的一个文档Doc1 里面只有字段 '数据库'
另一个文档Doc2 500多K 里面有很多'数据库'字段 ,其中一些经过了排版,有的用了黑体, 加下划线
用select * from dali where contains(MyImage,'数据库')只能查出Doc1,Doc2没有显示出来
而我在dali表中只存放Doc2一条记录时也未能检索出记录,是不是和文档格式有关系Top
47 楼weixiao51(4fen)回复于 2003-04-02 11:19:31 得分 5
向大力学习Top
48 楼chyich()回复于 2003-04-03 20:27:01 得分 5
up,学习!!Top
49 楼happydreamer(www.sz.js.cn,www.gyxk.com)回复于 2003-04-04 10:10:08 得分 5
To dali
Doc2的问题解决了,又试了几个xls文件处理,都没有问题,可以查出不同工作表里的数据和经过公式运算的数据
Top
50 楼glboy(星毅)回复于 2003-04-26 21:57:29 得分 0
mark,好久没过来了,:)Top
51 楼flyinger(风往北吹)回复于 2003-06-07 18:06:12 得分 0
告诉你们!
我希望大力天天停电!
呵呵!Top
52 楼baijie1130(兔子)回复于 2003-07-09 14:48:52 得分 0
非常感谢大力!!向大力多学习!!Top
53 楼gho(李逍遥)回复于 2003-08-02 09:58:33 得分 0
hiTop
54 楼vikingleo(云风^NET)回复于 2003-08-09 09:30:50 得分 0
MARKTop



