2013-03-27 29 views
0

我不知道是什麼改變了 - 事情與我們的Lucene的實施工作比較好。但是現在,索引目錄中的文件數量正在不斷增長。它從_0文件開始,然後出現_1個文件,然後是_2和_3文件。我傳遞虛假的IndexWriter類的構造函數「創造」的參數,如果在該目錄中的現有文件時,它開始:爲什麼不刪除未使用的段文件?

indexWriter = new IndexWriter(azureDirectory, analyzer, (azureDirectory.ListAll().Length == 0), IndexWriter.MaxFieldLength.UNLIMITED); 
if (indexWriter != null) 
{ 
    // Set the number of segments to save in memory before writing to disk. 
    indexWriter.MergeFactor = 1000; 
    indexWriter.UseCompoundFile = false; 
    indexWriter.SetRAMBufferSizeMB(800); 
     ... 
    indexWriter.Dispose(); indexWriter = null; 
} 

也許這realated到UseCompoundFile標誌?

每隔幾分鐘,我創建了一個新的IndexWriter,處理10,000個文檔,然後清除的IndexWriter。該索引可以工作,但越來越多的文件非常糟糕,因爲我正在使用AzureDirectory,它在啓動Lucene寫入之前將每個文件從Azure複製到緩存目錄中。

謝謝。

回答

2

這是正常行爲。如果你想要一個索引段,你有一些選擇:

  • 使用複合文件
  • 使用1合併因子如果使用LogMergePolicy,這是Lucene的3.0的默認策略。請注意,您在IndexWriter使用的方法就是隻要mergePolicy是LogMergePolicy實例調用mergePolicy.MergeFactor的便捷方法。
  • 運行每個更新後的優化索引

低合併因素和優化後,每個更新可以對您的應用程序的性能,這將取決於你的索引類型嚴重的缺點。

看到這個鏈接,文檔一點點的MergeFactor的影響: http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/index/LogMergePolicy.html#setMergeFactor%28%29

+0

我想我已經讀了優化不使用AzureDirectory時候做一個聰明的做法。你有什麼經驗嗎?另外,爲什麼要使用1的MergeFactor?我認爲一個很大的因素會減少寫入文件的速度,從而加快文件的添加速度。謝謝 - 很好地澄清在線提供的衝突信息。 – Jarvis 2013-03-27 20:02:07

+0

我對AzureDirectory特定的東西沒有經驗,所以我不能告訴你爲什麼它會對Azure不好。如果合併係數較大,則合併次數會減少(以RAM使用爲代價),因此索引編制速度會更快,但搜索速度會更慢。 MergeFactor也控制索引中所允許的段的總數,這沒有很好的記錄。我在官方文檔中唯一可以找到的地方是:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_1/api/core/org/apache/lucene/index/LogMergePolicy.html#getMergeFactor%28 %29 – 2013-03-27 20:53:26

相關問題