Hi Olivier!
In my code i'm using following IndexSearcher extention:
public class IndexSearcherWrapper extends IndexSearcher {
private int referenceCount;
private final IndexReader indexReader;
public IndexSearcherWrapper(IndexReader indexReader) {
super(indexReader);
this.indexReader = indexReader;
this.referenceCount = 1;
}
public IndexSearcher getReference() {
referenceCount++;
return this;
}
public void close() throws IOException {
referenceCount--;
if (referenceCount <= 0) {
super.close();
indexReader.close();
}
}
};
in the code obtaining IndexSearcher I do call getReference() method and
use indexSearcher as usual (search & close);
also referenceCount initially is set to 1 to prevent underlying
indexReader being closed after first call of close() method.
when opening new IndexSearcher (after index change) I do call close()
method one more time ensuring this IndexSearcher will be closed as soon
as last thread closes this IndexSearcher.
and about second question:
while changing index all open IndexReaders(and IndexSearchers) don't
"see" changes until reopening.
Olivier Jaquemet wrote:
Hi all,
As I read it on LIA, and as it has already been said on the mailing
list multiple times, you only need one IndexSearcher for all your
thread, and when your index change, you just need to create a new one
to reflect changes.
Otis said in this post you could replaced old searcher and let it
being collected by the GC.
http://mail-archives.apache.org/mod_mbox/lucene-java-user/200502.mbox/[EMAIL PROTECTED]
Note that my question is maybe more java related than anything else,
but, anyway...
In the source code of IndexSearcher (and all searchers), I could not
find any finalize method that closes the searcher, how can you be sure
you old searcher is going to be closed? am I missing something? Is
there still a step I need to do in order to close the searcher
properly ? Do I need to create a facade to the searcher, keep my own
reference of uses and call a close in a finalize method?
Thanks in advance for your answers :)
Olivier
PS: Another small question while I'm there, if a long indexation of a
lot Documents occurs, can the old searcher still be used for some time
while the indexation takes place, without problems? Cause I encoutered
an ArrayOutOfBoundException under some scorer class, unfortunately I
did not kept the trace.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
--
regards,
Volodymyr Bychkoviak
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]