Lucene.Net 索引合併

摘要: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  第二版 )