lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Saurabh Gokhale <>
Subject Re: Separating IndeWriter with NRT
Date Sun, 24 Jul 2011 18:52:03 GMT

I am performing the same activity that you have specified. I have indexer as
a thread which starts at the server start up and searcher as a web app.

I am managing the index reader and writer objects using a factory. This
factory is a singleton instance which maintains one writer, reader and a
searcher object. If the objects are null, I create them and if they exists I
return the same objects back.

Now regarding NRT indexed access, currently whenever a new request for the
searcher object comes in, before I return a searcher object, I reopen reader
and check if the old reader and the new readers are same, if not, I assigned
the newly created reader to instance reader object and since by searcher
object is created using reader object, searchers gets access to not yet
committed data.

Code example:
searcher = new IndexSearcher(getIndexReader());

   if (reader == null)
        reader = writer.getReader();
        IndexReader newReader = reader.reopen();
        if(newReader != reader)
          //reader.close(); --> Reader.close() may give you errors elsewhere
if you have loosely coupled code, like other thread using that reader for
some other job like MoreLikeThis class
          reader = newReader;
   return reader;

I am able to get newly indexed, not yet committed data in my search results
with this change. I am not checking isCurrent on the reader though that I
will try before opening the reader.



On Fri, Jul 22, 2011 at 2:33 PM, duschhaube <> wrote:

> Hi,
> I think you have to use IndexReader.isCurrent and then reopen the reader if
> there are changes.
> You will need an automatism that periodically checks if any changes where
> made to the index. If that happens und need to reopen the your reader.
> But a real lucene expert maybe can give you a better advice.
> greets
> Thorsten
> Am 22.07.2011 18:36, schrieb Mihai Caraman:
>  I trust that some of you had to run the indexing as a service/jar and the
>> search as a servlet/war. How can i obtain this while still keeping the
>> search near real time(this is difficult because IndexReader needs direct
>> access to the IndexWriter instance). If no lucene users know this, where
>> else should i ask this question?
>> Thank you,
>> Mihai
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.**<>
> For additional commands, e-mail: java-user-help@lucene.apache.**org<>

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message