2015-01-13 45 views
0

我正在使用Lucene版本3.6.1的現有代碼庫進行一些更改。有關IndexSearcher/IndexReader和目錄的問題

IndexSearcher已經被每個搜索​​請求實例化。

IndexReader reader = IndexReader.open(index); 
IndexSearcher searcher = new IndexSearcher(reader); 

RAMDirectory已使用和close方法尚未caleed。

定期重新編制索引並在發生這種情況時創建RAMDirectory的新實例。但是現有的IndexReader#close方法尚未被調用。

以下是我的問題。

  1. 對IndexReader調用close方法的影響是什麼?
  2. 對RAMDirectory調用close方法的影響是什麼?
  3. 對索引閱讀器的引用不保存在任何地方。所以爲了關閉它,我可以做IndexSearcher.ggetIndexReader()。close()嗎?
  4. 有沒有類似的方式來訪問目錄,以便我可以在重新索引發生時關閉它?

回答

1

問>在IndexReader上不調用close方法有什麼影響?
A>對於基於文件系統的索引,您可能會運行文件描述符。但如果所有的IndexSearcher s和IndexReader都成爲GCable,這應該不是什麼大問題。也就是說,如果你不關心偶發的內存高峯 - 但這取決於你的使用模式。

Q>在RAMDirectory上不調用close方法有什麼影響?
A>內部地圖不會被清除。再說一次,如果你扔掉RAMDirectory的實例並重新創建它,那不是什麼大問題。但我仍然會關閉它以避免隱患,並可能幫助GC。

Q>對索引閱讀器的引用不保存在任何地方。因此,爲了關閉它,我可以做IndexSearcher.getIndexReader().close()?
A>是的,一旦創建了IndexSearcher,它始終會參考原始的IndexReader,它可以使用上述方法訪問。

問>是否有類似的方式來訪問目錄,以便在重新索引發生時關閉它?
答>不可以。您的意思是保留此參考。