lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Doug Cutting <>
Subject Re: indexreader refresh
Date Wed, 04 Jan 2006 18:30:01 GMT
Amol Bhutada wrote:
> If I have a reader and searcher on a indexdata folder and another 
> indexwriter writing documents to the same indexdata folder, do I need to 
> close existing reader and searcher and create new so that newly indexed 
> data comes into search effect?

[ moved from user to dev list]

This is a frequent request.  While opening an all-new IndexReader is 
effective, it is not always efficient.  It might be nice to support a 
more efficient means of re-opening an index.

Perhaps we should add a few new IndexReader methods, as follows:

/** If <code>reader</code>'s index has not been changed, return
   * <code>reader</code>, otherwise return a new {@link IndexReader}
   * reading the new latest of the index
public static IndexReader open(IndexReader reader) {
   if (isCurrent()) {
     // unchanged: return existing
     return reader;

   // try to incrementally create new reader
   IndexReader result = reader.reopen(reader);
   if (result != null) {
     return result;

   // punt, opening an entirely new reader

/** Return a new IndexReader reading the current state
   * of the index, re-using reader's resources, or null if this
   * is not possible.
protected IndexReader reopen(IndexReader reader) {
   return null;

Then we can add implementations of reopen to SegmentReader and 
MultiReader that attempt to re-use the existing, already opened 
segments.  This should mostly be simple, but there are a few tricky 
issues, like detecting whether an already-open segment has had 
deletions, and deciding when to close obsolete segments.

Does this sound like it would make a good addition?  Does someone want 
to volunteer to implement it?


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

View raw message