分类: C/C++
2008-04-23 21:52:03
基于MS Index Server 的全文索引实现
作者:
本人有个爱好就是看到网上好的文章就收藏起来。目前机器上有250M的文章了,并都已按时间,目录分类存放好。但是在查找时发现很不方便。所以想自己建一个全文索引的知识库。
在方案选择上有ms sql server的全文检索和index server可以用。为了做个决定,自己提出了如下需求。
需求分析:
对于以上两个问题,sql server好像不能很好的满足:
过程:
(在这里我们取名KB,要索引的文章在D:\知识库\C#知识库,建成后的索引文件放在D:\KB)
实现方法:
微软已经给我们提供了现成的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 日期/时间 上次编写文件的时间。