基于MS Index Server的全文索引实现
2010-02-19 20:34:23 来源:WEB开发网本人有个爱好就是看到网上好的文章就收藏起来。目前机器上有250M的文章了,并都已按时间,目录分类存放好。但是在查找时发现很不方便。所以想自己建一个全文索引的知识库。
在方案选择上有ms sql server的全文检索和index server可以用。为了做个决定,自己提出了如下需求。
要求知识库以后可以按时间,依目录拆分;
要求支持word,xls,txt,ppt,带图片的html;
可以扩展支持aspx,pdf;
需求分析:
对于以上两个问题,sql server好像不能很好的满足:
原因1:我要把硬盘上的文章导到数据库里,工作量很大。其次sql server差异备分=备分时刻与第一次的全备份的差异。如果有本次差异备分=第一次全备分+前N次备分那就好了。
原因2:由于很多文章是HTML的。带图片。放到sql server里就有个一对多的问题。解决不了。
原因3:全文检索的填充不能实时进行。
原因4:文章放到数据库image类型字段后,必须通过程序来查看。没有直接放在硬盘上查看方便。
所以最终选择index server.
过程:
(在这里我们取名KB,要索引的文章在D:\知识库\C#知识库,建成后的索引文件放在D:\KB)
启动Windows 2000 /XP上的索引;
缺省情况下选择图标位于管理工具组中的计算机管理。窗口的右边提供关于当前在服务器上存在的索引信息。默认有两个索引:System和Web;
要创建新的索引,用鼠标右键单击索引服务或右边的面板,选定新建编录。
显示添加编录对话框,指定索引的名称并用浏览按钮选取位置。索引服务不会立即开始索引,此时将弹出一条消息框,单击确定继续。为了达到最佳的性能,索引服务可以放在和Web服务器隔离开的硬盘上 ;
指定索引的目录,用右键单击新建的编录名,从弹出选单中选定属性,将出现如图2所示的对话框。第一个选项卡常规显示刚刚输入的内容,在第二个选项卡跟踪中的WWW服务器下拉列表中选取你要索引的Web网站 ;
有了创建的编录,现在可以挑选你想在索引中包括的目录。
实现方法:
用index server其实用html页面就可以实现。参考C:\WINDOWS\Help\ciquery.htm 这是用activex 实现的。
在这里我采用C#和oledb来实现。
微软已经给我们提供了现成的oledb驱动来访问index server。其中PROVIDER=MSIDXS,具体哪些列可以选择,参看附录。
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)
{
Console.Write(E.Message);
}
finally
{
con.Close();
}
}
更多精彩
赞助商链接