[ 
https://issues.apache.org/jira/browse/LUCENE-5058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13683469#comment-13683469
 ] 

Michael McCandless commented on LUCENE-5058:
--------------------------------------------

This happens because when you first open an NRT reader from the IndexWriter, it 
pools open SegmentReaders for all segments, even after you've closed your 
searcher.

Once you close the IndexWriter the files should be deleted.
                
> IOException when trying to delete data from index
> -------------------------------------------------
>
>                 Key: LUCENE-5058
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5058
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/index
>    Affects Versions: 4.3
>         Environment: Windows 7
>            Reporter: Christian
>
> I have a small test prog which inserts some data in an index and after that, 
> opens a searcher from the uncommitted index to search on and output the 
> result to std.out. The Searcher is immediately closed. Then, i call 
> deleteAll() on the index but it encounters an IOException stating that the 
> index files could not be removed. I have investigated with Sysinternals and 
> it says the file is still locked despite the fact that the index searcher is 
> correctly closed. If i call deleteAll() without opening a searcher before it 
> just works fine as expected. This seems to be a bug in Lucene, since closing 
> the index searcher makes it impossible to delete the index.
> Here is the source code:
> {code:title=Bar.java|borderStyle=solid}
> public class LuceneTest {
>     private Directory dir;
>     private IndexWriter writer;
>     
>     public void addDocs(long value) throws IOException {
>         Document doc = new Document();
>         doc.add(new LongField("ID", value, Field.Store.YES));
>         writer.deleteDocuments(new Term("ID", "1"));
>         writer.addDocument(doc);
>     }
>     
>     public void search() throws IOException {
>       IndexSearcher searcher = new IndexSearcher(DirectoryReader.open(writer, 
> false));
>         TopDocs results = 
> searcher.search(NumericRangeQuery.newLongRange("ID", 1L, 2L, true, true), 1);
>         
>         for ( ScoreDoc sc : results.scoreDocs) {
>             System.out.println(searcher.doc(sc.doc));
>         }
>         
>         searcher.getIndexReader().close();
>     }
>     public static void main(String[] args) throws IOException {
>         new LuceneTest();
>     }
>     
>     public LuceneTest() throws IOException {
>         dir = FSDirectory.open(new File("test"));
>         IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, 
> new StandardAnalyzer(Version.LUCENE_43));
>         config.setInfoStream(System.out);
>         writer = new IndexWriter(dir, config);
>         
>         addDocs(1L); 
>         search();
>         //writer.commit(); -- If i call commit after search, then no 
> IOException occurrs!
>         
>         writer.deleteAll();
>     }
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to