摘要:Lucene.Net 索引合併
當索引分散在不同的目錄 , 而我們希望對這些檔案進行整理並
將其統一放在某一實體路徑之下時 , 便可以使用下列的方式合併索引
合併索引不只能合併檔案路徑下的索引 , 也可以合併在記憶體中的索引
下述的程式碼將會把 Dir1 的索引與 Dir2 的索引進行合併並且儲存在 Dir3
FSDirectory Dir1 = FSDirectory.Open(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\App_Data\\Section1"));
FSDirectory Dir2 = FSDirectory.Open(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\App_Data\\Section2"));
FSDirectory Dir3 = FSDirectory.Open(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\AppData\\Section3"));
IndexWriter indexWriter = new IndexWriter(Dir3, new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30), true, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.AddIndexesNoOptimize( new Lucene.Net.Store.Directory[] { Dir1, Dir2 });
indexWriter.Optimize();
indexWriter.Close();
前述合併的目的不只為了解決上面所陳述的情況 , 同時也為了減少目錄內索引檔案的數量 , 以便可以更快的處理索引 ,
在進行檢索時 , 需要開啟每一個索引檔案 , 如果索引檔案非常多 , 那麼對於資源的消耗影響很大 , 而且系統都有最大開啟檔案數
目的限制 , 若超過這個數目 , 作業系統會禁止開啟最後一個檔案而會造成檢索的失敗 , 因此需要對索引內的檔案數量做一個控制
資料來源 :
開發專屬個人的搜尋引擎 ( 使用 Lucene & Heritrix 第二版 )