免費的Lucene 原理與代碼分析完整版下載
Lucene是一個基於Java的高效的全文檢索庫。
那麽什麽是全文檢索,為什麽需要全文檢索?
目前人們生活中出現的數據總的來說分為兩類:結構化數據和非結構化數據。很容易理解,結構化數據是有固定格式和結構的或者有限長度的數據,比如數據庫,元數據等。非結構化數據則是不定長或者沒有固定格式的數據,如圖片,郵件,文檔等。還有一種較少的分類為半結構化數據,如XML,HTML等,在一定程度上我們可以將其按照結構化數據來處理,也可以抽取純文本按照非結構化數據來處理。
非結構化數據又稱為全文數據。,對其搜索主要有兩種方式:
- 順序掃描法(SerialScanning):顧名思義,要找內容包含某一個字符串的文檔,就挨著文檔一個個找,對照每一個文檔從頭到尾,一直掃描,指導掃描完所有的文檔。類似於Windows中搜索文件的功能。
- 第二種則為索引。就是從非結構化數據中提取出信息重新組織,使其變得有一定的組織,從而提高檢索效率。比如我們的電話簿,從電話簿中查找聯系人,我們根據首字母拼音可以索引定位到某一個聯系人。
先建立索引在對索引進行搜索的過程就叫做全文檢索(Full-text Search)。下圖為全文檢索的一般過程,也是Lucene檢索的過程。
我的博客:CODE大全:www.codedq.net;業余草:www.xttblog.com;愛分享:www.ndislwf.com或ifxvn.com。
Lucene總的來說是:
- 一個高效的,可擴展的,全文檢索庫。
- 全部用Java實現,無須配置。
- 僅支持純文本文件的索引(Indexing)和搜索(Search)。
- 不負責由其他格式的文件抽取純文本文件,或從網絡中抓取文件的過程。
在Lucene in action中,Lucene 的構架和過程如下圖,
說明Lucene是有索引和搜索的兩個過程,包含索引創建,索引,搜索三個要點。
我的博客:CODE大全:www.codedq.net;業余草:www.xttblog.com;愛分享:www.ndislwf.com或ifxvn.com。
讓我們更細一些看Lucene的各組件:
- 被索引的文檔用Document對象表示。
- IndexWriter通過函數addDocument將文檔添加到索引中,實現創建索引的過程。
- Lucene的索引是應用反向索引。
- 當用戶有請求時,Query代表用戶的查詢語句。
- IndexSearcher通過函數search搜索Lucene Index。
- IndexSearcher計算term weight和score並且將結果返回給用戶。
- 返回給用戶的文檔集合用TopDocsCollector表示。
那麽如何應用這些組件呢?
讓我們再詳細到對Lucene API 的調用實現索引和搜索過程。
- 索引過程如下:
- 創建一個IndexWriter用來寫索引文件,它有幾個參數,INDEX_DIR就是索引文件所存放的位置,Analyzer便是用來對文檔進行詞法分析和語言處理的。
- 創建一個Document代表我們要索引的文檔。
- 將不同的Field加入到文檔中。我們知道,一篇文檔有多種信息,如題目,作者,修改時間,內容等。不同類型的信息用不同的Field來表示,在本例子中,一共有兩類信息進行了索引,一個是文件路徑,一個是文件內容。其中FileReader的SRC_FILE就表示要索引的源文件。
- IndexWriter調用函數addDocument將索引寫到索引文件夾中。
- 搜索過程如下:
- IndexReader將磁盤上的索引信息讀入到內存,INDEX_DIR就是索引文件存放的位置。
- 創建IndexSearcher準備進行搜索。
- 創建Analyer用來對查詢語句進行詞法分析和語言處理。
- 創建QueryParser用來對查詢語句進行語法分析。
- QueryParser調用parser進行語法分析,形成查詢語法樹,放到Query中。
- IndexSearcher調用search對查詢語法樹Query進行搜索,得到結果TopScoreDocCollector。
以上便是Lucene API函數的簡單調用。
我的博客:CODE大全:www.codedq.net;業余草:www.xttblog.com;愛分享:www.ndislwf.com或ifxvn.com。
然而當進入Lucene的源代碼後,發現Lucene有很多包,關系錯綜復雜。
然而通過下圖,我們不難發現,Lucene的各源碼模塊,都是對普通索引和搜索過程的一種實現。
此圖是上一節介紹的全文檢索的流程對應的Lucene實現的包結構。(參照http://www.lucene.com.cn/about.htm中文章《開放源代碼的全文檢索引擎Lucene》)
- Lucene的analysis模塊主要負責詞法分析及語言處理而形成Term。
- Lucene的index模塊主要負責索引的創建,裏面有IndexWriter。
- Lucene的store模塊主要負責索引的讀寫。
- Lucene的QueryParser主要負責語法分析。
- Lucene的search模塊主要負責對索引的搜索。
- Lucene的similarity模塊主要負責對相關性打分的實現。
了解了Lucene的整個結構,我們便可以開始Lucene的源碼之旅了。
免費的Lucene 原理與代碼分析完整版下載地址:lucene原理與代碼分析完整版pdf下載。
免費的Lucene 原理與代碼分析完整版下載