lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael McCandless <luc...@mikemccandless.com>
Subject Re: Synchronous Lucene index update tests occasionally fail
Date Mon, 27 Jun 2016 08:12:31 GMT
Can you boil this down to a small standalone test case showing the issue?

Mike McCandless

http://blog.mikemccandless.com

On Mon, Jun 27, 2016 at 4:03 AM, Baskakov Daniel <gdaniq@gmail.com> wrote:

> Thank you Mike.
>
> Commit is performed after each indexing op in unit tests only:
>
>   public void commitNow() throws IOException
>   {
>     if (getIndexWriter().hasUncommittedChanges())
>     {
>       getIndexWriter().commit();
>     }
>   }
>
> In production environment I have a timer that performs commit periodically
> if required.
>
> I do reopen near-real-time IR before every test search (thanks to your
> blog!):
>
>   private IndexSearcher acquireIndexSearcher() throws IOException
>   {
>     if (searcherManager == null)
>     {
>       searcherManager = new SearcherManager(getIndexWriter(), true, null);
>     }
>     searcherManager.maybeRefreshBlocking();
>     return searcherManager.acquire();
>   }
>
> But the problem is still there.
>
> Daniel.
>
> чт, 23 июн. 2016 г. в 17:19, Michael McCandless <lucene@mikemccandless.com
> >:
>
> > You must reopen your IndexReader to see recent changes to the index.
> >
> > But, IW.commit after each indexing op is very costly.
> >
> > It's much better to get near-real-time readers, e.g. from a
> > SearcherManager that you pass your IW instance too, after each set of
> > changes that you now need to search.
> >
> > As long as you call SearcherManager.maybeRefreshBlocking after changes to
> > the IW, the resulting reopened reader will reflect your index changes.
> >
> > Mike McCandless
> >
> > http://blog.mikemccandless.com
> >
> > On Thu, Jun 23, 2016 at 7:47 AM, Baskakov Daniel <gdaniq@gmail.com>
> wrote:
> >
> >> Originally i've posted the question at stackoverflow.com but without
> any
> >> reply. So I hope someone can help me in the official list.
> >>
> >> I'm testing that dynamic changes of the domain model reflects at the
> >> Lucene
> >> index. Special event listeners (synchronous, no multithreading here) are
> >> executed when the domain model components change. Listeners update the
> >> Lucene index:
> >>
> >> Document doc = createDocumentForComponent(domainModelComponent);
> >> indexWriter.updateDocument(docTerm, doc);
> >> indexWriter.commit();
> >>
> >> Then I perform searching by a query that contains recently added
> changes.
> >> Most of the time tests work perfect, but sometimes they fail (especially
> >> in
> >> automated builds).
> >>
> >> I've tried to acquire an IndexSearcher by different ways: create a new
> >> searcher on the same Directory or obtain it via SearcherManager.
> >>
> >> Is there a way to made recent index changes available to index searcher
> >> with 100% confidence?
> >>
> >
> >
>

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