1. 程式人生 > >全文索引----Lucene的總體架構

全文索引----Lucene的總體架構

Lucene總的來說是:

1.一個高效的,可擴充套件的,全文檢索庫

2.全部用Java實現,無須配置。

3.僅支援純文字檔案的索引(Indexing)和搜尋(Search)。

引用一個圖

說明Lucene是有索引和搜尋的兩個過程,包含索引建立,索引,搜尋三個要點

更細一點看Lucene的各元件

1.被索引的文件用Document物件表示。

2.IndexWriter通過函式addDocument將文件新增到索引中,實現建立索引的過程。

3.Lucene的索引是應用反向索引。

4.當用戶有請求時,Query代表使用者的查詢語句。

5.IndexSearcher通過函式search搜尋Lucene Index

6.IndexSearcher計算term weight和score並且將結果返回給使用者。

7.返回給使用者的文件集合用TopDocsCollector表示。

那麼如果應用這些元件呢?

我們再詳細對Lucene API的呼叫實現索引和搜尋過程。

索引建立過程如下:

1.建立一個IndexWriter用來寫索引檔案,它有幾個引數,INDEX_DIR就是索引檔案所存放的位置,Analyzer便是用來對文件進行詞法分

析和語言處理的

2.建立一個Document代表我們要索引的文件。

3.將不同Field加入到文件中。我們知道,一篇文件有多重資訊,如題目,做著,修改時間,內容等。不同型別的資訊用不同的field來表示,

在本例中,一共有兩類資訊進行了索引,一個是檔案路徑,一個是檔案內容。其中FileReader的SRC_FILE就表示要索引的原始檔。

4.IndexWriter呼叫函式addDocument將索引寫到索引資料夾中。

搜尋過程如下:

1.IndexReader將磁碟上的索引資訊讀入到記憶體,INDEX_DIR就是索引檔案存放的位置。

2.建立IndexSearcher準備進行搜尋。

3.建立Analyer用來對查詢語句進行詞法分析和語言處理。

4.建立QueryParser呼叫parser進行語法分析,形成查詢語法樹,放到Query中。

5.IndexSearcher呼叫search對查詢語法樹Query進行搜尋,得到結果TopScoreDocCollector。

以上就是Lucene API函式的簡單呼叫。

然而當進入Lucene的原始碼後,發現Lucene有很多包,關係錯綜複雜。

引用一張圖,我們不能發現,Lucene的各原始碼模組,都是對普通索引和搜尋過程的一種實現。

1.Lucene的analysis模組主要負責詞法分析及語言處理而形成Term。

2.Lucene的index模組主要負責索引的建立,裡面有IndexWriter。

3.Lucene的store模組主要負責索引的讀寫。

4.Lucene的QueryParser主要負責語法分析。

5.Lucene的search模組主要負責對索引的搜尋。

6.Lucene的similarity模組主要負責對相關性打分的實現。