上下文:
輔助器外觀類爲我的應用程序提供搜索方法。 由於性能不成問題,因此會爲每個查詢創建一個新的IndexSearcher
。Lucene 2.9.2:AlreadyClosedException在實例化IndexSearcher時
對於每個查詢,一個新的搜索創建這樣的:
File indexFile = new File(String absolutePathToIndex);
IndexSearcher searcher = new IndexSearcher(indexFile.getAbsolutePath(), true);
有時我得到的AlreadyClosedException
我不理解,因爲沒有共享搜索的對象。
任何想法?有關如何打開索引的最佳做法?已知的問題? 謝謝。
堆棧跟蹤:
org.apache.lucene.store.AlreadyClosedException: this Directory is closed
at org.apache.lucene.store.Directory.ensureOpen(Directory.java:251)
at org.apache.lucene.store.FSDirectory.listAll(FSDirectory.java:530)
at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:585)
at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:69)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:476)
at org.apache.lucene.index.IndexReader.open(IndexReader.java:243)
at org.apache.lucene.search.IndexSearcher.<init>(IndexSearcher.java:78)
建議的解決方案#1:要走的路?
Directory directory = FSDirectory.open(File indexFile);
IndexSearcher searcher = new IndexSearcher(directory, true);
...do the query...
searcher.close();
問題:對於每個查詢創建從溶液#1中的上面的代碼。是否有必要關閉目錄呢?檢查了Lucene 2.9.2的源代碼後,searcher.close()
未關閉與內部reader
關聯的directory
對象。
更正......爲什麼要多個線程試圖關閉同一個對象?每個線程都有自己的IndexSearcher實例。 – basZero