lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Sokolov <msoko...@gmail.com>
Subject Re: SearcherManager not seeing changes in IndexWriteral and
Date Fri, 09 Nov 2018 14:45:17 GMT
That should work, I think, but if you are serializing these threads so
that they cannot run concurrently, maybe try running both operations
in a single thread, at least as a test.
On Fri, Nov 9, 2018 at 9:16 AM Boris Petrov <boris_petrov@live.com> wrote:
>
> If you mean the synchronization of the threads, it is not in the
> example, but Thread 2 is *started* after Thread 1 finished executing the
> code that I gave as an example. So there is happens-before between them.
> If you mean synchronization on the Lucene level - isn't that what
> "maybeRefreshBlocking" should do?
>
> On 11/9/18 3:29 PM, Michael Sokolov wrote:
> > I'm not seeing anything there that would synchronize, or serialize, the
> > read after the write and commit. Did you expect that for some reason?
> >
> > On Fri, Nov 9, 2018, 6:00 AM Boris Petrov <boris_petrov@live.com wrote:
> >
> >> Hi all,
> >>
> >> I'm using Lucene version 7.5.0. We have a test that does something like:
> >>
> >> Thread 1:
> >>
> >>             Field idStringField = new StringField("id", id,
> >> Field.Store.YES);
> >>             Field contentsField = new TextField("contents", reader);
> >>             Document document = new Document();
> >>             document.add(idStringField);
> >>             document.add(contentsField);
> >>
> >>             writer.updateDocument(new Term(ID_FIELD, id), document);
> >>             writer.flush(); // not sure this flush is needed?
> >>             writer.commit();
> >>
> >> Thread 2:
> >>
> >>             searchManager.maybeRefreshBlocking();
> >>             IndexSearcher searcher = searchManager.acquire();
> >>             try {
> >>                 QueryParser parser = new QueryParser("contents", analyzer);
> >>                 Query luceneQuery = parser.parse(queryText);
> >>                 ScoreDoc[] hits = searcher.search(luceneQuery,
> >> 50).scoreDocs;
> >>             } finally {
> >>                 searchManager.release(searcher);
> >>             }
> >>
> >> Thread 1 happens before Thread 2.
> >>
> >> Sometimes, only sometimes, the commit from thread 1 is not *immediately*
> >> visible in Thread 2. If I put a "Thread.sleep(1000)" it always works.
> >> Without it, sometimes the search is empty. I'm not sure if I'm doing
> >> something wrong or this is a bug?
> >>
> >> Thanks!
> >>
> >>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
For additional commands, e-mail: java-user-help@lucene.apache.org


Mime
View raw message