嗨
我的lucene索引經常用新記錄進行更新,我在索引中有5,000,000條記錄,並且正在使用FieldCache緩存我的一個數字字段。但在更新索引後,需要一段時間才能重新加載FieldCache(即時重新加載緩存原因文檔,表示DocID不可靠),那麼如何通過向FieldCache僅添加新添加的DocID來最大限度地減少此開銷,從而導致此功能變爲瓶頸應用。頻繁更新索引的FieldCache
IndexReader reader = IndexReader.Open(diskDir);
int[] dateArr = FieldCache_Fields.DEFAULT.GetInts(reader, "newsdate"); // This line takes 4 seconds to load the array
dateArr = FieldCache_Fields.DEFAULT.GetInts(reader, "newsdate"); // this line takes 0 second as we expected
// HERE we add some document to index and we need to reload the index to reflect changes
reader = reader.Reopen();
dateArr = FieldCache_Fields.DEFAULT.GetInts(reader, "newsdate"); // This takes 4 second again to load the array
我希望有一個機制,通過增加僅對新增文件到我們的數組中的索引減少這個時候有這樣http://invertedindex.blogspot.com/2009/04/lucene-dociduid-mapping-and-payload.html 的技術來提高性能,但它仍然加載,我們已經把所有的文件和我認爲如果我們找到一種方法只是將新添加的文檔添加到陣列中,則無需重新加載它們全部
你的代碼的問題是我用內部/外部閱讀器描述的。您將外部閱讀器(DirectoryReader)傳遞給FieldCache。它認爲這兩個讀者是不同的,並分別緩存它們。您需要使用最內層的閱讀器,即段閱讀器來爲每個段填充它。這意味着它只會在你打電話給Reopen之後加載更改。我會在幾分鐘後爲此發佈一些代碼。 – sisve 2011-04-03 06:50:35