Thanks for the reply. I'm using lucene 1.4.2. I believe that the IndexSearcher in this version will close the IndexReader if the IndexReader was supplied implicitly but I'm constructing the IndexReader first and passing it to the IndexSearcher constructor as I want to use the reader object later.
Do you know why I can't close the IndexReader explicitly under some circumstances and why, when I do manage to close it I can still call methods on the reader?
Thanks, Helen.
On Monday, December 6, 2004, at 05:04 pm, Otis Gospodnetic wrote:
Helen,
I don't know what version of Lucene you are using. The version in CVS has IndexSearcher that can close the underlying IndexReader for you.
Otis
--- Helen Warren <[EMAIL PROTECTED]> wrote:
Hi All, I'm having some trouble closing an index reader. I'm getting a IOException (bad file descriptor). Can anybody tell me what I'm doing
wrong and how I should be closing this object?
An outline of an extract of my code:
// Make a new searcher (indexName passed in as string). IndexReader myReader = IndexReader.open(indexName); searcher = new IndexSearcher(myReader);
//Create a snowball analyzer object. //Create a MultifieldQueryParser object with the snowball analyzer and build a luceneQuery from a user entered search string. //Create a new BooleanQuery (overallQuery), add the luceneQuery to it
and add several other BooleanQueries specific to other fields in the documents.
// Do the search hits = searcher.search(overallQuery); //close the IndexSearcher object searcher.close();
//close the IndexReader object myReader.close();
//return results return hits;
The myReader.close() line causes the IOException to be thrown. To try
to debug, I wrote a simplified code to open and close a reader and searcher, and in the process discovered something else that I have found confusing: Here's an extract of the simplified code:
String indexName = "foo";
// Make a new searcher IndexReader myReader = IndexReader.open(indexName); IndexSearcher searcher = new IndexSearcher(myReader); //try to do something with the reader Collection theseFields = myReader.getFieldNames(); //close the IndexSearcher object searcher.close(); //try to close the reader now myReader.close(); //now try to do something with the reader again; try { int maximum = myReader.maxDoc(); System.err.println("Next document would be: "+maximum); } catch (Exception e) { System.err.println("Exception: "+e.getMessage()); } In this case, the reader appears to close without error but even after I've called myReader.close() I can execute the maxDoc() method on that object and return results. Anybody shed any light?
Thanks, Helen.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
