lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Baskakov Daniel <gda...@gmail.com>
Subject Re: Synchronous Lucene index update tests occasionally fail
Date Mon, 27 Jun 2016 08:03:18 GMT
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