Hi, I'm trying to brush up on some of the *cough* newer APIs (we've been using 2.9.2 up until now). Anyway, I have the test below which a modified version of one of the tests in Lucene In Action, but uses LuceneTestCase as a base class.
public class MetaphoneReplacementAnaylyzerTest extends LuceneTestCase { @Test public void testKoolKat() throws Exception { Analyzer analyzer = new MetaphoneReplacementAnalyzer(); IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, analyzer); // Directory directory = new RAMDirectory(); Directory directory = newDirectory(); IndexWriter writer = new IndexWriter(directory, config); Document doc = new Document(); doc.add(new Field("contents", "cool cat", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc, analyzer); writer.commit(); IndexSearcher searcher = new IndexSearcher(IndexReader.open(directory)); // IndexSearcher searcher = new IndexSearcher(IndexReader.open(writer, true)); Query q = new QueryParser(Version.LUCENE_36, "contents", analyzer).parse("kool kat"); TopDocs hits = searcher.search(q, 1); assertEquals(1, hits.totalHits); int docID = hits.scoreDocs[0].doc; doc = searcher.doc(docID); assertEquals("cool cat", doc.get("contents")); writer.close(); searcher.close(); directory.close(); // if I comment this out, I get an assertion failure about the directory not being closed } } My issue is that I get the following stack trace when I try to close the directory. I've tried variations of closing the writer instead of calling commit etc, but I think I'm just missing something fundamental here. Note that obviously if I change : Directory directory = newDirectory(); to: Directory directory = new RAMDirectory() everything works, but I'd love to know how to correctly close the writer, searcher etc. java.lang.RuntimeException: MockDirectoryWrapper: cannot close: there are still open files: {_0.tis=1, _0.frq=1, _0.fdx=1, _0.prx=1, _0.fdt=1} at org.apache.lucene.store.MockDirectoryWrapper.close(MockDirectoryWrapper.java:548) at com.kuripai.lucene.analysis.MetaphoneReplacementAnaylyzerTest.testKoolKat(MetaphoneReplacementAnaylyzerTest.java:48) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) ... at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.RuntimeException: unclosed IndexInput: _0.prx at org.apache.lucene.store.MockDirectoryWrapper.addFileHandle(MockDirectoryWrapper.java:472) at org.apache.lucene.store.MockDirectoryWrapper.openInput(MockDirectoryWrapper.java:497) at org.apache.lucene.store.Directory.openInput(Directory.java:145) at org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:96) at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:116) at org.apache.lucene.index.SegmentReader.get(SegmentReader.java:94) at org.apache.lucene.index.DirectoryReader.<init>(DirectoryReader.java:105) at org.apache.lucene.index.ReadOnlyDirectoryReader.<init>(ReadOnlyDirectoryReader.java:27) at org.apache.lucene.index.DirectoryReader$1.doBody(DirectoryReader.java:78) at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:709) at org.apache.lucene.index.DirectoryReader.open(DirectoryReader.java:72) at org.apache.lucene.index.IndexReader.open(IndexReader.java:256) at com.kuripai.lucene.analysis.MetaphoneReplacementAnaylyzerTest.testKoolKat(MetaphoneReplacementAnaylyzerTest.java:36) ... 39 more Any insight would be greatly appreciated. Thanks Brendan --------------------------------------------------------------------- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org For additional commands, e-mail: java-user-h...@lucene.apache.org