zoukankan      html  css  js  c++  java
  • 基于ms index server的全文索引实现。

    最近一直在郁闷一件事。自己机器上的知识库里有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();
       }
     
      }


  • 相关阅读:
    HashMap源码解析
    如何同时运行两个Tomcat
    Thymeleaf遍历List<Map>和Map<>
    Apache POI详解
    如何管理系统的右键新建菜单
    datatable的dom配置
    如何获取Html的height和width属性(网页宽、高)
    什么是跨域?如何解决跨域问题?
    C# 各类文件扩展名
    C# 接口与抽象类的区别? 什么情景下使用接口,什么情景下使用抽象类?
  • 原文地址:https://www.cnblogs.com/tongzhenhua/p/36448.html
Copyright © 2011-2022 走看看