lucene索引合併與增量索引

2021-04-13 04:53:57 字數 1714 閱讀 8291

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的

瓶頸是在

往磁碟上寫索引檔案的過程中。為了解決這個問題, lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 indexwriter 提供了三個引數用來調整緩衝區的大小以及往磁碟上寫索引檔案的頻率。

1.合併因子(mergefactor)

這 個引數決定了在 lucene 的乙個索引塊中可以存放多少文件以及把磁碟上的索引塊合併成乙個大的索引塊的頻率。比如,如果合併因子的值是 10,那麼當記憶體中的文件數達到 10 的時候所有的文件都必須寫到磁碟上的乙個新的索引塊中。並且,如果磁碟上的索引塊的隔數達到 10 的話,這 10 個索引塊會被合併成乙個新的索引塊。這個引數的預設值是 10,如果需要索引的文件數非常多的話這個值將是非常不合適的。對批處理的索引來講,為這個引數賦乙個比較大的值會得到比較好的索引效果。

2.最小合併文件數

3.最大合併文件數

這個引數決定了乙個索引塊中的最大的文件數。它的預設值是 integer.max_value,將這個引數設定為比較大的值可以提高索引效率和檢索速度,由於該引數的預設值是整型的最大值,所以我們一般不需要改動這個引數。

/**

* 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");

}}

判斷索引目錄的segments檔案是否存在,

如果存在,用增量索引

否則, 重新建立索引

如果是重新建立索引

只需要遍歷需要索引的內容,然後新增文件

如果是增量索引

判斷主key[檔名(包含全路徑)]在索引中是否存在

如果存在

判斷[檔案的修改時間],是否和索引中儲存的[修改時間]一致

如果不一致

刪除舊的索引中的該索引專案

新增對該文件的索引

否則新增該文件的索引 缺點,不能發現已經刪除的檔案,當然是認為的去某個目錄刪除該檔案。

如果是程式的話當然是可以的,只需要把索引中的專案刪除。 

lucene索引合併與增量索引

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 in...

lucene索引合併與增量索引

利用 lucene,在建立索引的工程中你可以充分利用機器的硬體資源來提高索引的效率。當你需要索引大量的檔案時,你會注意到索引過程的瓶頸是在往磁碟上寫索引檔案的過程中。為了解決這個問題,lucene 在記憶體中持有一塊緩衝區。但我們如何控制 lucene 的緩衝區呢?幸運的是,lucene 的類 in...

lucene索引合併

lucene 索引合併 關鍵步驟如下 indexwriter fswriter null fs indexwriter ramwriter null ram directory fsdir directory ramdir ramdir new ramdirectory 判斷原索引檔案是否存在 開啟...