我在一個正常的方式創建索引:Lucene net IndexWriter在UpdateDocument之後即使進行優化也會使索引大小加倍?
var directory = FSDirectory.Open(...);
var analyzer = ...
var indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.SetWriteLockTimeout(30000);
indexWriter.AddDocument(doc1);
indexWriter.AddDocument(doc2);
indexWriter.AddDocument(...);
indexWriter.Commit();
indexWriter.Optimize();
indexWriter.Close();
這就形成了5.8MB
指數現在我需要更新2個文件exactly..with 1個字在他們每個人的加入。 ..所以索引的大小應該由一個非常小的量而增加或者或者根本沒有:
var indexWriter = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.SetWriteLockTimeout(30000);
indexWriter.UpdateDocument(doc1);
indexWriter.UpdateDocument(doc2);
indexWriter.Commit();
**indexWriter.Optimize();**
indexWriter.Close();
此操作雙打指數的大小,它讓_0.cfs文件大小的方式ind ex之前是5.8mb ...並且在_2.xxx文件中創建了一個相同大小的全新索引...所以對於一個單詞更改的兩個文檔,它將其加倍!
如果我重複這個操作,它也會繼續這樣做...所以它只會永遠加倍。
我的想法是,優化調用應該優化它,而不是導致這樣的事情?
如何阻止我的指數翻倍?
Thnx!
Thnx,做到了!我在c#中使用聲明來包裝IndexSearcher,該聲明處理索引後,不要讓它掛起來,這就做到了! Btw。你知道將IndexSearcher緩存爲performanse會更聰明嗎? 此外,如果我確實緩存它,是否有辦法在晚上強制殺死所有搜索者(例如,當幾乎沒有人使用搜索器Web應用程序時,我的索引每天晚上由單獨的應用程序執行一次)? –
是的,你應該試圖儘可能保持Searcher打開的時間,因爲內部lucene緩存底層IndexReader中的信息,這有助於提高性能。我通常做的是有一個管理器來保存我的IndexSearcher實例,通常每個索引爲1。當我即將關閉我的IndexWriter時,我首先使用管理器關閉IndexSearchers,然後關閉IndexWriter。 –
我已經完成了我的索引優化。它的規模從370增加到826 GB,但文件現在只針對一個細分市場,並且在嘗試了您的建議後尺寸不會縮小。你可以給我更多的建議嗎?謝謝。 –