Hi Otis,
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]



Reply via email to