Thanks for checking. I think I tracked down the problem. We apparently extended most of these classes and more work was necessary to facilitate the latest API. I just didn't dig deep enough, into nextDoc() which I thought too trivial to step into. The extended Scorer repeatedly returned the last doc ID instead of NO_MORE_DOCS. Sorry for the wild goose chase!
I do think I've run across another problem which I may report in a new thread: ParallelReader.reopen() appears to be taking up file descriptors to the same files without letting the old ones go. Our Java process hits the 'limit -n' barrier (in the thousands) after a few minutes. My current work around is to check isCurrent(), close, then open. I wonder if the changes to support near real-time search inadvertently broke this. ----- Original Message ---- From: Uwe Schindler <[email protected]> To: [email protected] Sent: Sat, February 27, 2010 4:55:55 AM Subject: RE: Infinite loop when searching empty index I was doing the same, MatchAllDocsScorer is fine and also AbstractAllTermDocs. ----- Uwe Schindler H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de eMail: [email protected] > -----Original Message----- > From: Michael McCandless [mailto:[email protected]] > Sent: Saturday, February 27, 2010 11:52 AM > To: [email protected] > Subject: Re: Infinite loop when searching empty index > > I turned this into a unit test... but I don't see it never > returning... the test passes. > > How did you create your empty reader? > > Patch: > > Index: src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java > =================================================================== > --- src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java > (revision > 916939) > +++ src/test/org/apache/lucene/search/TestMatchAllDocsQuery.java > (working copy) > @@ -27,6 +27,8 @@ > import org.apache.lucene.index.IndexReader; > import org.apache.lucene.queryParser.QueryParser; > import org.apache.lucene.store.RAMDirectory; > +import org.apache.lucene.store.Directory; > +import org.apache.lucene.store.MockRAMDirectory; > > import org.apache.lucene.util.LuceneTestCase; > > @@ -115,6 +117,21 @@ > dir.close(); > } > > + public void testNeverReturns() throws Exception { > + Directory dir = new MockRAMDirectory(); > + IndexWriter w = new IndexWriter(dir, new > StandardAnalyzer(TEST_VERSION_CURRENT), > IndexWriter.MaxFieldLength.UNLIMITED); > + IndexReader r = w.getReader(); > + w.close(); > + > + assertEquals(0, r.numDocs()); // empty index > + IndexSearcher s = new IndexSearcher(r); > + TopDocsCollector collector = TopScoreDocCollector.create(0, true); > + s.search(new MatchAllDocsQuery(), collector); // never returns > + s.close(); > + r.close(); > + dir.close(); > + } > + > public void testEquals() { > Query q1 = new MatchAllDocsQuery(); > Query q2 = new MatchAllDocsQuery(); > > Mike > > On Fri, Feb 26, 2010 at 4:54 PM, Justin <[email protected]> wrote: > > Is this a bug in Lucene Java as of tr...@915399? > > > > int numDocs = reader.numDocs(); // = 0 (empty index) > > TopDocsCollector collector = TopScoreDocCollector.create(numDocs, > > true); > > searcher.search(new MatchAllDocsQuery(), collector); // never > > returns > > > > // Searcher > > public void search(Query query, Collector collector) > > throws IOException { > > search(createWeight(query), null, collector); // never returns > > } > > > > // extends IndexSearcher > > public void search(Weight weight, Filter filter, final Collector > collector) throws IOException { > > boolean topScorer = (filter == null) true : false; > > Scorer scorer = weight.scorer(reader, true, topScorer); > > if (scorer != null && topScorer) { > > scorer.score(collector); // never returns > > > > // Scorer > > public void score(Collector collector) throws IOException { > > collector.setScorer(this); > > int doc; > > while ((doc = nextDoc()) != NO_MORE_DOCS) { // doc = 0 > (infinite) > > collector.collect(doc); > > } > > } > > > > > > Thanks for any feedback, > > Justin > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
