We have the same situation and use an atomic counter.  Basically, we have 
a SearcherHolder class and a SearcherManager class.  The SearcherHolder 
holds the searcher and the number of threads referencing the searcher. 

When the thread that writes to the index closes the index, it sends an 
event that the SearcherManager is listening for.  The next time a search 
is performed the manager opens a new searcher.  The old searcher is marked 
as outdated but is not closed until the last thread that references the 
searcher returns it.





ZaeX <[EMAIL PROTECTED]> 
02/16/2008 03:32 AM
Please respond to
java-user@lucene.apache.org


To
java-user@lucene.apache.org
cc

Subject
how to safely periodically reopen the IndexReader?






Hi, all

I've got a question here needing your help:
For my index, I opened one IndexWriter (autocommit mode) and one
IndexSearcher on it;
I have quite a lot of threads here concurrently writing new documents and
doing search in index.
the IndexWriter is flushed periodically.
as I want the IndexSearcher be able to see the latest record, I also need 
to
periodically reopen the underlying IndexReader.

But is it safe to just call close() on the IndexSearcher when there are
still threads using it?

or maybe I should use atomic counter to make sure there's no thread using 
it
before calling close() on IndexSearcher?

thanks.

Reply via email to