什麼是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) 擷取符合條件的編号