|
|
 |
首页 … 技术文档 Technical Articles |
|
| |
| |
基于MS Index Server 的全文索引实现
|
| (时间:2007-6-27 18:00:20 共有
人次浏览) |
本人有个爱好就是看到网上好的文章就收藏起来。目前机器上有250M的文章了,并都已按时间,目录分类存放好。但是在查找时发现很不方便。所以想自己建一个全文索引的知识库。 在方案选择上有ms sql server的全文检索和index server可以用。为了做个决定,自己提出了如下需求。
- 要求知识库以后可以按时间,依目录拆分;
- 要求支持word,xls,txt,ppt,带图片的html;
- 可以扩展支持aspx,pdf;
需求分析: 对于以上两个问题,sql 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();
}
}
关于文档格式扩展。为了实现对aspx,apcx可以通过增中过滤器来实现。 例如对aspx,和ascx的索引可以在注册表中加以下注册项。[HKEY_CLASSES_ROOT\.aspx\PersistentHandler] ="{eec97550-47a9-11cf-b952-00aa0051fe20}"
[HKEY_CLASSES_ROOT\.ascx\PersistentHandler] ="{eec97550-47a9-11cf-b952-00aa0051fe20}"
对于pdf格式的过滤器在adobe的网站上也有。
附录
字段名 字段类型 说明 --------------------------------------------------------------------------- Access 日期/时间 上次访问文件的时间。 Characterization 文本/字符串 文档的特征或摘要。由索引服务器计算。 Create 日期/时间 文件的创建时间。 Directory 文本/字符串 文件的物理路径,不包括文件名。 DocAppName 文本/字符串 创建文件的应用程序的名称。 DocAuthor 文本/字符串 文档的作者。 DocByteCount 数字 文档的字节数。 DocCategory 文本/字符串 文档的类型,如备注、计划或白皮书。 DocCharCount 数字 文档中的字符数。 DocComments 文本/字符串 有关文档的注释。 DocCompany 文本/字符串 为其编写文档的公司的名称。 DocCreatedTm 日期/时间 文档的创建时间。 DocEditTime 日期/时间 编辑文档所花费的总时间。 DocHiddenCount 数字 PowerPoint 文件中的隐藏幻灯片数。 DocKeywords 文本/字符串 文档的关键字。 DocLastAuthor 文本/字符串 最近编辑过文档的用户。 DocLastPrinted 日期/时间 上次打印文档的时间。 DocLastSavedTm 日期/时间 上次保存文档的时间。 DocLineCount 数字 文档中包含的行数。 DocManager 文本/字符串 文档作者的管理者名称。 DocNoteCount 数字 PowerPoint 文件中带有注释的页数。 DocPageCount 数字 文档中的页数。 DocParaCount 数字 文档中的段落数。 DocPartTitles 文本/字符串 文档组成部分的名称。例如,在 Microsoft Excel 中,电子表格是文档的组成部分。在 PowerPoint 中,幻灯片是文档的组成部分。在 Word 中,包含在主文档中的文档的文件名是文档的组成部分。 DocPresentationTarget 文本/字符串 PowerPoint 演示文稿的目标格式(如 35mm、打印机、视频,等等)。 DocRevNumber 文本/字符串 文档的当前版本号。 DocSlideCount 数字 PowerPoint 文件中的幻灯片数。 DocSubject 文本/字符串 文档的主题。 DocTemplate 文本/字符串 文档的模板名称。 DocTitle 文本/字符串 文档的标题。 DocWordCount 数字 文档中的字数。 FileIndex 数字 文件的唯一标识。 FileName 文本/字符串 文件的名称。 HitCount 数字 文件中的匹配(与查询匹配的字词)数。 Path 文本/字符串 文件的完整物理路径,包括文件名。 Rank 数字 行的等级号。范围介于 0 到 1000 之间。数字越大,匹配率越高。 ShortFileName 文本/字符串 简短 (8.3) 文件名。 Size 数字 文件大小,以字节为单位。 VPath 文本/字符串 文件的完整虚拟路径,包括 文件名。如果有多个可能的路径,则选择与特定查询最匹配的路径。 Write 日期/时间 上次编写文件的时间。
|
|
|
【打印该页】 【关闭窗口】 |
|
此技术资料来自网络,仅供参考。未经许可,不得转载。
若有侵权,请及时与我们取得联系! |
| |
|
|
|
|