lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Willnauer" <>
Subject Re: Singleton and IndexModifier
Date Sun, 20 Aug 2006 16:47:58 GMT
On 8/20/06, lude <> wrote:
> Hello,
> when using the new IndexModifier of Lucene 2.0, what would be
> the best creation-pattern?
> Should there be one IndexModifier instance in the application (==singelton)?
> Could an IndexModifier be opened for a longer time or should it be created
> on use and immediately closed?
You create an indexmodifier if you want to modify your index. if you
wanna commit your data (make it available via index reader / searcher)
you close or rather flush your indexmodifier. After closing the
modifier you can create a new searcher and all modifications are
visible to the searcher / reader. Basically there is one index
modifier (or one single modifying instances per index as you must not
modify your index with more that one instance of indexreader -writer
-modifier). If you use the flush() method you don't need to create a
new IndexModifier instance.

You can leave your indexmod. open for a long time but without a commit
the indexed or deleted documents won't be visible to your searcher /
reader) Opening indexmodifiers is a heavy operation which should be
used carefully so you can close your modifier every n docs or after a
certain idle time.
Just be aware that IndexModifier uses IndexReader and IndexWriter
internally so if you do a delete after a addDocument the indexwriter
will be closed and a new indexreader will be opened. This is also a
heavy operation in the meaning of performance.
You could keep your deletes until you want to flush your instance of
IndexModifier to gain a bit of performance.
> Another issue:
> - I create an IndexModifier
> - The applicaton crashes
> - There exists a write-lock on the index
> --> Next time I start the application the IndexModifier couldn't be opened
> because of the locks.
> What is the right way to check and delete old write locks?
You can use the IndexReader.unlock(Directory dir) method the java doc says:

   * Caution: this should only be used by failure recovery code,
   * when it is known that no other process nor thread is in fact
   * currently accessing this index.

To make sure this happens only in recovery mode.

best regards Simon
> Thanks
> lude

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message