索引庫優化
阿新 • • 發佈:2018-12-03
1什麼是索引庫
索引庫是Lucene的重要的儲存結構,它包括二部份:原始記錄表,詞彙表
原始記錄表:存放的是原始記錄資訊,Lucene為存入的內容分配一個唯一的編號
詞彙表:存放的是經過分詞器拆分出來的詞彙和該詞彙在原始記錄表中的編號
1.2為什麼要將索引庫進行優化
在預設情況下,向索引庫中增加一個Document物件時,索引庫自動會新增一個副檔名叫*.cfs的二進位制壓縮檔案,如果向索引庫中存Document物件過多,那麼*.cfs也會不斷增加,同時索引庫的容量也會不斷增加,影響索引庫的大小。
1.3索引庫優化方案
合併cfs檔案,合併後的cfs檔案是二進位制壓縮字元,能解決是的檔案大小和數量的問題
indexWriter.addDocument(document);
indexWriter.optimize();
indexWriter.close();
設定合併因子,自動合併cfs檔案,預設10個cfs檔案合併成一個cfs檔案
indexWriter.addDocument(document); indexWriter.setMergeFactor(3); indexWriter.close();
使用RAMDirectory,類似於記憶體索引庫,能解決是的讀取索引庫檔案的速度問題,
它能以空換時,提高速度快,但不能持久儲存,因此啟動時載入硬碟中的索引庫到記憶體中的索引庫,退出時將記憶體中的索引庫儲存到硬碟中的索引庫,且內容不能重複。
Article article = new Article(1,"學習","學習JavaEE"); Document document = LuceneUtil.javabean2document(article); Directory fsDirectory = FSDirectory.open(new File("E:/indexDBDBDBDBDBDBDBDB")); Directory ramDirectory = new RAMDirectory(fsDirectory); IndexWriter fsIndexWriter = new IndexWriter(fsDirectory,LuceneUtil.getAnalyzer(),true,LuceneUtil.getMaxFieldLength()); IndexWriter ramIndexWriter = new IndexWriter(ramDirectory,LuceneUtil.getAnalyzer(),LuceneUtil.getMaxFieldLength()); ramIndexWriter.addDocument(document); ramIndexWriter.close(); fsIndexWriter.addIndexesNoOptimize(ramDirectory); fsIndexWriter.close();