前言:
由于所在单位的工作性质,日常有很多事务性工作,涉及大量文档或模板,而工作原因通常一个人所使用的文档会分布在局域网内各个电脑上,渐渐查找文档成了很头疼的问题,一来多数搜索方式只支持文件名搜索,二来这些搜索方式只支持本地检索,因而找文档时需要挨个电脑上重复查找,有时需要不断回想文件名,或者询问他人,影响工作效率。因而开发出该软件用以辅助办公(其实是单位另一个项目的子部分简化而来的)。
一、 简介
该软件基于lucene的全文索引引擎和pangu开源分词系统构建全文索引模块对本地多个文件夹内的文档进行全文索引,同时基于UDP组播协议完成局域网P2P文件查询请求以及利用同步TCP完成点对点结果发送以及文件请求和传输。UI基于.net框架和DevExpress控件集。
主要功能:
1、 多路径全文索引
2、 局域网内对等节点全文检索
3、 局域网检索结果文件请求与传输
4、 多线程索引建立
二、 使用说明
1、 设置索引存储路径
该路径为全文检索引擎lucene存储倒排索引分段文件的地方,可以拖动到窗口设置。
2、 设置索引文件夹
该文件夹为需要检索的文件所在路径,可以勾选递归子目录对子文件夹进行完整的索引。
3、 点击左上角的新建索引,等待软件的索引建立,如果文件较多,可能耗时较长,尤其word和pdf文档耗时较多,可按照一个word、pdf文档30s,txt文档1s/1MB进行估算。
4、 索引建立完成会弹出对话框提示,然后就可以在检索内容里输入要检索的关键词进行检索,也可以输入一句话,或者用空格隔开关键词,默认关键词是或的关系进行查找。
5、 可以勾选左侧的搜索选项进行搜索范围的设定,搜索结果中的标题点击后可以打开对应的文档,如果文档是远程节点上的,可以弹出对话框提示是否需要保持,如果需要则选择路径,否则下载到临时文件夹内并打开。
三、 源码结构介绍
基础和通用类位于Common文件夹内,FullTextIndex完成全文检索的基本功能,NetWork提供了网络访问的基本功能,SQLite提供sqlite数据库的简单封装,Wrapper对全文检索、网络访问和数据库操作提供进一步的功能封装,并和UI交互,Main为主界面,ResultItem为自定义控件,封装了检索结果的显示以及和主界面的交互。
(1)、Common文件夹介绍
1、 其中GlobalVar集中管理了上层类会通用的只读变量,应用get访问器保证只读。
2、 CommMethod类提供了上层类通用与功能无关的几个方法。
3、 INIClass类提供了静态方法完成配置文件的读写。
4、 MessageEventArgs类简单封装了本项目中用到的事件通知用到的事件消息。
5、 CommObj文件提供了几个项目中通用的类的封装。
(2)、FullTextIndex文件夹介绍
1、Index类封装了Lucene.Net.Index.IndexWriter的一些基本操作,包括缓存的设置,索引的建立,对关键词的查询。
2、TDocs类封装了文档对象,作为全文检索的基本单元,包含几个Field信息。
(3)、NetWork文件夹介绍
1、NetObject主要提供了用于封装UDP数据包的MultiCastObject类,用于文件请求信息的FileRequestObject类,和本地节点用于存储请求文件保存地址信息的类FileWaitObject。
2、NetClass类初始化后会建立三个线程,分别用于接收UDP组播信息、监听并接收TCP字符串、以及监听并接收TCP文件传输,并在得到相应信息后以事件通知上层类NetOpt。
(4)、SQLite文件夹介绍
该文件夹内的类来源为SQLITE官方的Demo,主要封装了SQLite的操作,这里并不深入介绍。
(5)、Wrapper文件夹介绍
1、NetOpt类在NetClass类基础上进一步封装,对接收消息的事件进行响应,同时完成UI界面传入的数据发送请求,包括搜索请求和文件请求,以及对远程节点请求的响应。
2、IndexOpt类在Index类基础上封装了对新建索引和检索的处理,连接了UI层和底层索引引擎。
3、SQLiteCon类提供了基本的SQLite数据库操作如新建、插入、修改、删除等的简单访问方法。
(6)、ResultItemCon自定义控件
该控件提供对单条检索结果的标题、摘要显示,以及响应单击标题操作获取文件。
其他
源码地址:
http://download.****.net/download/atp1992/10193523
软件地址:
http://download.****.net/download/atp1992/10193522
原作相关链接:
http://www.straka.cn/blog/lanfulltextindexshare