天天看點

Lucene簡介

 什麼是Lucene

Lucene是apache軟體基金會釋出的一個開放源代碼的全文檢索引擎工具包,由資深全文檢索專家Doug Cutting所撰寫,它是一個全文檢索引擎的架構,提供了完整的建立索引和查詢索引,以及部分文本分析的引擎,Lucene的目的是為軟體開發人員提供一個簡單易用的工具包,以友善在目标系統中實作全文檢索的功能,或者是以此為基礎建立起完整的全文檢索引擎,Lucene在全文檢索領域是一個經典的祖先,現在很多檢索引擎都是在其基礎上建立的,思想是相通的。

即:Lucene是根據關健字來搜尋的文本搜尋工具,隻能在某個網站内部搜尋文本内容,不能跨網站搜尋

 Lucene通常用在什麼地方

Lucece不能用在網際網路搜尋(即像百度那樣),隻能用在網站内部的文本搜尋(即隻能在CRM,RAX,ERP内部使用),但思想是相通的。

參見<<Lucene用在什麼地方.JPG>>

參見<<Lucene用在服務端三層結構中的哪一層.JPG>>

 Lucene中存的什麼内容

Lucene中存的就是一系列的二進制壓縮檔案和一些控制檔案,它們位于計算機的硬碟上,

這些内容統稱為索引庫,索引庫有二部份組成:

(1)原始記錄

     存入到索引庫中的原始文本,例如:傳智是一家IT教育訓練機構

(2)詞彙表

     按照一定的拆分政策(即分詞器)将原始記錄中的每個字元拆開後,存入一個供将來搜尋的表

參見<< Lucene索引庫結構與原理圖.JPG>>

為什麼網站内部有些地方要用Lucene來索搜,而不全用SQL來搜尋

(1)SQL隻能針對資料庫表搜尋,不能直接針對硬碟上的文本搜尋

(2)SQL沒有相關度排名

(3)SQL搜尋結果沒有關健字高亮顯示

(4)SQL需要資料庫的支援,資料庫本身需要記憶體開銷較大,例如:Oracle

(5)SQL搜尋有時較慢,尤其是資料庫不在本地時,超慢,例如:Oracle

 書寫代碼使用Lucene的流程圖

參見<<Lucene程式宏觀結構.JPG>>

參見<<Lucene索引庫建立的過程.JPG>>

參見<<Lucene索引庫查詢的過程.JPG>>

建立索引庫:

1)  建立JavaBean對象

2)  建立Docment對象

3)  将JavaBean對象所有的屬性值,均放到Document對象中去,屬性名可以和JavaBean相同或不同

4)  建立IndexWriter對象

5)  将Document對象通過IndexWriter對象寫入索引庫中

6)  關閉IndexWriter對象

根據關鍵字查詢索引庫中的内容:

1)  建立IndexSearcher對象

2)  建立QueryParser對象

3)  建立Query對象來封裝關鍵字

4)  用IndexSearcher對象去索引庫中查詢符合條件的前100條記錄,不足100條記錄的以實際為準

5)  擷取符合條件的編号