局域網全文檢索軟件

前言

由於所在單位的工作性質,日常有很多事務性工作,涉及大量文檔或模板,而工作原因通常一個人所使用的文檔會分佈在局域網內各個電腦上,漸漸查找文檔成了很頭疼的問題,一來多數搜索方式只支持文件名搜索,二來這些搜索方式只支持本地檢索,因而找文檔時需要挨個電腦上重複查找,有時需要不斷回想文件名,或者詢問他人,影響工作效率。因而開發出該軟件用以輔助辦公(其實是單位另一個項目的子部分簡化而來的)。

一、     簡介

該軟件基於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.csdn.net/download/atp1992/10193523

軟件地址:

http://download.csdn.net/download/atp1992/10193522

原作相關鏈接:

http://www.straka.cn/blog/lanfulltextindexshare