Heim  >  Artikel  >  Datenbank  >  基于MS Index Server的全文索引实现

基于MS Index Server的全文索引实现

WBOY
WBOYOriginal
2016-06-07 15:03:441290Durchsuche

本人有个爱好就是看到网上好的文章就收藏起来。目前机器上有250M的文章了,并都已按时间,目录分类存放好。但是在查找时发现很不方便。所以想自己建一个全文索引的知识库。 在方案选择上有ms sql server的全文检索和index server可以用。为了做个决定,自己

本人有个爱好就是看到网上好的文章就收藏起来。目前机器上有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)<br> {<br>   string constr="PROVIDER=MSIDXS;DATA SOURCE=KB";<br>   OleDbConnection con=new OleDbConnection(constr);<br>   try<br>   {<br>     OleDbCommand cmd=new OleDbCommand();<br>     cmd.Connection=con;<br>     cmd.CommandText="SELECT Rank,FileName, Create, Access, Path<br>       FROM SCOPE()<br>       where CONTAINS (''\""+TB_Text.Text+"\"'')";<br>     OleDbDataAdapter da=new OleDbDataAdapter();<br>     da.SelectCommand=cmd;<br>     con.Open();<br>     DataSet ds=new DataSet();<br>     da.Fill(ds);<br>     dataGrid1.DataSource=ds;<br>   }<br>   catch(Exception E)<br>   {<br>     Console.Write(E.Message);<br>   }<br>   finally<br>   {<br>     con.Close();<br>   }<br> <br> }

1 2  下一页

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn