前兩篇,講到了lucene的一些用法,這一篇,我們繼續lucene的其他的特性
一) 索引庫優化
1.1什麼是索引庫
索引庫是lucene的重要的儲存結構,它包括二部份:原始記錄表,詞彙表
原始記錄表:存放的是原始記錄資訊,lucene為存入的內容分配乙個唯一的編號
詞彙表:存放的是經過分詞器拆分出來的詞彙和該詞彙在原始記錄表中的編號
1.2為什麼要將索引庫進行優化
在預設情況下,向索引庫中增加乙個document物件時,索引庫自動會新增乙個擴充套件名叫*.cfs的二進位制壓縮檔案,如果向索引庫中存document物件過多,那麼*.cfs也會不斷增 加,同時索引庫的容量也會不斷增加,影響索引庫的大小。
1.3索引庫優化方案
1.3.1合併cfs檔案,合併後的cfs檔案是二進位制壓縮字元,能解決是的檔案大小和數量的問題
如**:
@test
public void add2() throws exception
1.3.2設定合併因子,自動合併cfs檔案,預設10個cfs檔案合併成乙個cfs檔案
@test
public void add3() throws exception
1.3.3使用ramdirectory,類似於記憶體索引庫,能解決是的讀取索引庫檔案的速度問題,
它能以空換時,提高速度快,但不能持久儲存,因此啟動時載入硬碟中的索引庫到記憶體中的索引庫,退出時將記憶體中的索引庫儲存到硬碟中的索引庫,且內容不能重複。
@test
public void add4() throws exception
如圖所示:
二) 分詞器
2.1什麼是分詞器
採用一種演算法,將中英文本中的字元拆分開來,形成詞彙,以待使用者輸入關健字後搜尋
2.2為什麼要分詞器
因為使用者輸入的搜尋的內容是一段文字中的乙個關健字,和原始表中的內容有差別,
但作為搜尋引擎來講,又得將相關的內容搜尋出來,此時就得採用分詞器來最大限度
匹配原始表中的內容
2.3分詞器工作流程
步一:按分詞器拆分出詞彙
步二:去除停用詞和禁用詞
步三:如果有英文,把英文本母轉為小寫,即搜尋不分大小寫
**示例:
private static void testanalyzer(analyzer analyzer, string text) throws exception }
public static void main(string args) throws exception
三) 搜尋結果高亮3.1什麼是搜尋結果高亮
在搜尋結果中,將與關健字相同的字元用紅色顯示
示例**:
@test
public void searchbykey()throws exception
@test
public void search()throws exception
@test
public void search()throws exception,luceneutil.getanalyzer());
query query = queryparser.parse(keywords);
indexsearcher indexsearcher=new indexsearcher(luceneutil.getdirectory());
topdocs topdocs = indexsearcher.search(query, 100);
for(int i=0;i
lucene學習總結
一,建立索引 1,建立indexwriter directory fsdirectory。open file analyzer new standardanalyzer version indexwriter new indexwriter directory,analyzer,boolean,bo...
Lucene學習總結之七 Lucene搜尋過程解析
本系列文章將詳細描述幾乎最新版本的lucene的基本原理和 分析。其中總體架構和索引檔案格式是lucene 2.9的,索引過程分析是lucene 3.0的。鑑於索引檔案格式沒有太大變化,因而原文沒有更新,原理和架構的文章中引用了前輩的一些圖,可能屬於早期的lucene,但不影響對原理和架構的理解。本...
Lucene學習總結之二 Lucene的總體架構
lucene總的來說是 在lucene in action中,lucene 的構架和過程如下圖,說明lucene是有索引和搜尋的兩個過程,包含索引建立,索引,搜尋三個要點。讓我們更細一些看lucene的各元件 那麼如何應用這些元件呢?讓我們再詳細到對lucene api 的呼叫實現索引和搜尋過程。搜...