--- Otis Gospodnetic <[EMAIL PROTECTED]> wrote: > No, you can't add documents to an index once you close the IndexWriter. > You can re-open the IndexWriter and add more documents, of course. > > Otis
That's what I expected at first, but: 1- It's a disappointment, because such a 'feature' would have made IndexeWriter management much easier. You would open an IndexWriter at startup and reuse it during all the life of the application, just flushing on a regular base using the close() method and without worrying if other objects are currently using the writer. 2- When you say you can't add, do you mean it's impossible or that you shouldn't because for example it could corrupt the index? Maybe I'm wrong, but I think it's possible. Let's look at the follwoing code: " public static void main(String[] args) throws IOException { final IndexWriter writer1 = new IndexWriter("/tmp/test-reuse", new StandardAnalyzer(), true); // First write with the writer Document doc = new Document(); doc.add(new Field("name", "John", Field.Store.YES, Field.Index.UN_TOKENIZED)); writer1.addDocument(doc); System.out.println("1 ---- After first write, before closing the writer ---"); Searcher searcher = new IndexSearcher("/tmp/test-reuse"); Query query = new TermQuery(new Term("name", "John")); Hits hits = searcher.search(query); System.out.println("===> hits: " + hits.length()); System.out.println(); // CLOSING THE WRITER ONCE writer1.close(); System.out.println("2 ---- After first write, after closing the writer ---"); searcher = new IndexSearcher("/tmp/test-reuse"); hits = searcher.search(query); System.out.println("===> hits: " + hits.length()); System.out.println(); // Second write, THE WRITER HAS ALREADY BEEN CLOSED ONCE writer1.addDocument(doc); System.out.println("3 ---- After second write, the writer has been closed once ---"); hits = searcher.search(query); System.out.println("===> hits: " + hits.length()); System.out.println(); // Closing the writer again writer1.close(); System.out.println("4 ---- After second write, the writer has been closed twice ---"); searcher = new IndexSearcher("/tmp/test-reuse"); hits = searcher.search(query); System.out.println("===> hits: " + hits.length()); } == Results == 1 ---- After first write, before closing the writer --- ===> hits: 0 2 ---- After first write, after closing the writer --- ===> hits: 1 3 ---- After second write, the writer has been closed once --- ===> hits: 1 4 ---- After second write, the writer has been closed twice --- ===> hits: 2 As your can see, not only does the code above execute without complain but it also gives the right results. Thanks for your comments. __________________________________ Do you Yahoo!? Yahoo! Mail - Easier than ever with enhanced search. Learn more. http://info.mail.yahoo.com/mail_250 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]