最近一直在郁闷一件事。自己机器上的知识库里有250M的文章要整理。都已经分目录整理好了。以前碰上问题找收集的文章时,直接找。后来文章太多了。就用F3.再后来觉得F3找都太慢了。所以想做个全文索引。之所以郁闷不是技术有问题。而是方法太多了。
Oracle的全文索引扔在一边先。因为我讨厌很肥的东西。虽然以前为了混饭吃不得不用而已。
接下来就是首选ms sql server的全文检索和index server.
为了做个决定,自己先提出2个需求。
1.要求知识库以后可以按时间,依目录拆分。2.要求支持word,xls,txt,ppt,带图片的html.3.可以扩展支持aspx,pdf.
需求分析:因为我的知识库很多不在自己的机器上,所以经常是一段时间后刻盘带回家。不过因为要按目录,常常碰上不知道那些文章以前没有备分过。所以每次都是全刻。觉得浪费。但是放到sql server里也没法实现我的要求。每次的差异备分,都是基于第一次的全备分。如果有本次差异备分=第一次全备分+前N次备分那就好了。而且很多文章是HTML的。带图片。放到sql server里就有个一对多的问题。解决不了。而且放到数据库,体积暴增加以后不能直接在硬盘上找,看不见。很不爽。
所以最终选择index server.
实现过程:
A:建index server.这个不用说了,地球人都知道。一般连XP装完就都有的。把服务开启就是了。
(注意:index server默认有2个编目,一个web的我觉得没什么用。另一个system的。竟把你所有硬盘都编录在内。所以你不小心的话会发现以后硬盘成G成G的少掉。所以我是把两个默认编目全部删掉。自己建一个干净的。)
过程
⒈启动Windows 2000 Server服务器上的索引。
缺省情况下选择图标位于管理工具组中的计算机管理。窗口的右边提供关于当前在服务器上
存在的索引信息。默认有两个索引:System和Web。
⒉要创建新的索引,用鼠标右键单击索引服务或右边的面板,选定新建编录。
显示添加编录对话框,指定索引的名称并用浏览按钮选取位置。索引服务不会立即开始索引,此时将弹出一条消息框,单
击确定继续。为了达到最佳的性能,索引服务可以放在和Web服务器隔离开的硬盘上。
⒊指定索引的目录,用右键单击新建的编录名,从弹出选单中选定属性,将出现如图2所示的对话框。
第一个选项卡常规显示刚刚输入的内容,在第二个选项卡跟踪中的WWW服务器下拉列表中选取你要索引的Web网站。
⒋有了创建的编录,现在可以挑选你想在索引中包括的目录。
其实这些建完后就可以直接用MS给你默认建好的搜索页查了。
B:自己写代码。
1.用index server其实用html页面就可以实现。用minispy查一下MS的那个页面就知道这个HTML是放在哪里的了。它是用activex实现的
2.当然也可以用asp实现。在IIS4.0时,在IIS sample里就有query.asp这个用到index server的DEMO了。不过传说IIS5.0 MS把它去掉了。不过你在C盘找一下还是有query.asp这个文件。只不过我没见过iis 4.0的query.asp所以不好确定这个就是。
3.最后就是用asp.net来写一次。
private void BT_Search_Click(object sender, System.EventArgs e)
{
string constr="PROVIDER=MSIDXS;DATA SOURCE=KB";
OleDbConnection con=new OleDbConnection(constr);
try
{
OleDbCommand cmd=new OleDbCommand();
cmd.Connection=con;
cmd.CommandText="SELECT Rank,FileName, Create, Access, Path FROM SCOPE() where CONTAINS ('""+TB_Text.Text+""')";
OleDbDataAdapter da=new OleDbDataAdapter();
da.SelectCommand=cmd;
con.Open();
DataSet ds=new DataSet();
da.Fill(ds);
dataGrid1.DataSource=ds;
}
catch(Exception E)
{
.
}
finally
{
con.Close();
}
}