利用lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題, lucene 在記憶體中持有一塊緩衝區。但我們如何控制lucene 的緩衝區呢?幸運的是,lucene 的類indexwriter 提供了三個引數用來調整緩衝區的大小以及往磁碟上寫索引檔案的頻率。
1.合併因子(mergefactor)
這個引數決定了在lucene 的乙個索引塊中可以存放多少文件以及把磁碟上的索引塊合併成乙個大的索引塊的頻率。比如,如果合併因子的值是10,那麼當記憶體中的文件數達到10 的時候所有的文件都必須寫到磁碟上的乙個新的索引塊中。並且,如果磁碟上的索引塊的隔數達到10 的話,這10 個索引塊會被合併成乙個新的索引塊。這個引數的預設值是10,如果需要索引的文件數非常多的話這個值將是非常不合適的。對批處理的索引來講,為這個引數賦乙個比較大的值會得到比較好的索引效果。
2.最小合併文件數
3.最大合併文件數
這個引數決定了乙個索引塊中的最大的文件數。它的預設值是integer.max_value,將這個引數設定為比較大的值可以提高索引效率和檢索速度,由於該引數的預設值是整型的最大值,所以我們一般不需要改動這個引數。
清單5 列出了這個三個引數用法,清單5 和清單1 非常相似,除了清單5 中會設定剛才提到的三個引數。
提高索引效能
/**
* this class demonstrates how to improve the indexing performance
* by adjusting the parameters provided by indexwriter.
*/public class advancedtextfileindexer
}indexwriter.optimize();
indexwriter.close();
long endtime = new date().gettime();
system.out.println("mergefactor: " + indexwriter.mergefactor);
system.out.println("minmergedocs: " + indexwriter.minmergedocs);
system.out.println("maxmergedocs: " + indexwriter.maxmergedocs);
system.out.println("document number: " + textfiles.length);
system.out.println("time consumed: " + (endtime - starttime) + " milliseconds");
}}
通過這個例子,我們注意到在調整緩衝區的大小以及寫磁碟的頻率上面lucene 給我們提供了非常大的靈活性。現在我們來看一下**中的關鍵語句。如下的**首先建立了類indexwriter 的乙個例項,然後對它的三個引數進行賦值。
int mergefactor = 10;
int minmergedocs = 10;
int maxmergedocs = integer.max_value;
indexwriter indexwriter = new indexwriter(indexdir,luceneanalyzer,true);
indexwriter.mergefactor = mergefactor;
indexwriter.minmergedocs = minmergedocs;
indexwriter.maxmergedocs = maxmergedocs;
下面我們來看一下這三個引數取不同的值對索引時間的影響,注意引數值的不同和索引之間的關係。我們為這個實驗準備了10000 個測試文件。表1 顯示了測試結果。
表1:測試結果
通過表1,你可以清楚地看到三個引數對索引時間的影響。在實踐中,你會經常的改變合併因子和最小合併文件數的值來提高索引效能。只要你有足夠大的記憶體,你可以為合併因子和最小合併文件數這兩個引數賦盡量大的值以提高索引效率,另外我們一般無需更改最大合併文件數這個引數的值,因為系統已經預設將它設定成了最大。
提高Lucene索引效能
當索引的檔案不多時,用 lucene 預設的設定就能得到很好的效能。但是,如果索引大量檔案,就得通過一些手段去提高 lucene 索引效能。1 索引效能差的原因 1 lucene 索引過程 在索引檔案的過程中,lucene 不是直接將檔案索引到磁碟上,而是首先快取,然後在寫到磁碟。如上圖所示。2 索...
用索引提高SQL Server效能
用索引提高sql server效能url 特別說明 在微軟的sql server系統中通過有效的使用索引可以提高資料庫的查詢效能,但是效能的提高取決於資料庫的實現。在本文中將會告訴你如何實現索引並有效的提高資料庫的效能。在關係型資料庫中使用索引能夠提高資料庫效能,這一點是非常明顯的。用的索引越多,從...
維護索引 通過重組索引提高效能
如果碎片程度小於30 建議使用重組而不是重建。因為重組不會鎖住資料頁或者資料表,並且降低cpu的資源。總得來說,重組會清空當前的b tree,特別是索引的葉子節點,重組資料頁和消除碎片。和重建不同,重組不會新增任何新資料頁。為了了解是否有必要重組索引,需要首先檢視碎片程度,如果在10 以下,那一般沒...