javanna commented on code in PR #15660:
URL: https://github.com/apache/lucene/pull/15660#discussion_r3258985874
##########
lucene/sandbox/src/test/org/apache/lucene/sandbox/search/TestLargeNumHitsTopDocsCollector.java:
##########
@@ -82,93 +89,127 @@ public void testRequestLessHitsThanCollected() throws
Exception {
public void testIllegalArguments() throws IOException {
IndexSearcher searcher = newSearcher(reader);
- LargeNumHitsTopDocsCollector largeCollector = new
LargeNumHitsTopDocsCollector(15);
+ LargeNumHitsTopDocsCollectorManager largeCollectorManager =
+ new LargeNumHitsTopDocsCollectorManager(15);
TopScoreDocCollectorManager regularCollectorManager =
new TopScoreDocCollectorManager(15, Integer.MAX_VALUE);
- searcher.search(testQuery, largeCollector);
- TopDocs topDocs = searcher.search(testQuery, regularCollectorManager);
+ TopDocs largeTopDocs = searcher.search(testQuery, largeCollectorManager);
+ TopDocs regularTopDocs = searcher.search(testQuery,
regularCollectorManager);
- assertEquals(largeCollector.totalHits, topDocs.totalHits.value());
+ assertEquals(largeTopDocs.totalHits.value(),
regularTopDocs.totalHits.value());
+ LargeNumHitsTopDocsCollector collector =
largeCollectorManager.newCollector();
IllegalArgumentException expected =
- expectThrows(
- IllegalArgumentException.class,
- () -> {
- largeCollector.topDocs(350_000);
- });
+ expectThrows(IllegalArgumentException.class, () ->
collector.topDocs(350_000));
assertTrue(expected.getMessage().contains("Incorrect number of hits
requested"));
}
public void testNoPQBuild() throws IOException {
IndexSearcher searcher = newSearcher(reader);
- LargeNumHitsTopDocsCollector largeCollector = new
LargeNumHitsTopDocsCollector(250_000);
+ LargeNumHitsTopDocsCollectorManager largeCollectorManager =
+ new LargeNumHitsTopDocsCollectorManager(250_000);
TopScoreDocCollectorManager regularCollectorManager =
new TopScoreDocCollectorManager(reader.numDocs(), Integer.MAX_VALUE);
- searcher.search(testQuery, largeCollector);
- TopDocs topDocs = searcher.search(testQuery, regularCollectorManager);
+ TopDocs largeTopDocs = searcher.search(testQuery, largeCollectorManager);
+ TopDocs regularTopDocs = searcher.search(testQuery,
regularCollectorManager);
- assertEquals(largeCollector.totalHits, topDocs.totalHits.value());
-
- assertNull(largeCollector.pq);
- assertNull(largeCollector.pqTop);
+ assertEquals(largeTopDocs.totalHits.value(),
regularTopDocs.totalHits.value());
+ CheckHits.checkEqual(testQuery, largeTopDocs.scoreDocs,
regularTopDocs.scoreDocs);
}
public void testPQBuild() throws IOException {
IndexSearcher searcher = newSearcher(reader);
- LargeNumHitsTopDocsCollector largeCollector = new
LargeNumHitsTopDocsCollector(50);
+ LargeNumHitsTopDocsCollectorManager largeCollectorManager =
+ new LargeNumHitsTopDocsCollectorManager(50);
TopScoreDocCollectorManager regularCollectorManager =
new TopScoreDocCollectorManager(50, Integer.MAX_VALUE);
- searcher.search(testQuery, largeCollector);
- TopDocs topDocs = searcher.search(testQuery, regularCollectorManager);
-
- assertEquals(largeCollector.totalHits, topDocs.totalHits.value());
+ TopDocs largeTopDocs = searcher.search(testQuery, largeCollectorManager);
+ TopDocs regularTopDocs = searcher.search(testQuery,
regularCollectorManager);
- assertNotNull(largeCollector.pq);
- assertNotNull(largeCollector.pqTop);
+ assertEquals(largeTopDocs.totalHits.value(),
regularTopDocs.totalHits.value());
+ CheckHits.checkEqual(testQuery, largeTopDocs.scoreDocs,
regularTopDocs.scoreDocs);
}
public void testNoPQHitsOrder() throws IOException {
IndexSearcher searcher = newSearcher(reader);
- LargeNumHitsTopDocsCollector largeCollector = new
LargeNumHitsTopDocsCollector(250_000);
+ LargeNumHitsTopDocsCollectorManager largeCollectorManager =
+ new LargeNumHitsTopDocsCollectorManager(250_000);
TopScoreDocCollectorManager regularCollectorManager =
new TopScoreDocCollectorManager(reader.numDocs(), Integer.MAX_VALUE);
- searcher.search(testQuery, largeCollector);
- TopDocs topDocs = searcher.search(testQuery, regularCollectorManager);
-
- assertEquals(largeCollector.totalHits, topDocs.totalHits.value());
+ TopDocs largeTopDocs = searcher.search(testQuery, largeCollectorManager);
+ TopDocs regularTopDocs = searcher.search(testQuery,
regularCollectorManager);
- assertNull(largeCollector.pq);
- assertNull(largeCollector.pqTop);
+ assertEquals(largeTopDocs.totalHits.value(),
regularTopDocs.totalHits.value());
- topDocs = largeCollector.topDocs();
-
- if (topDocs.scoreDocs.length > 0) {
- float preScore = topDocs.scoreDocs[0].score;
- for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
+ if (largeTopDocs.scoreDocs.length > 0) {
+ float preScore = largeTopDocs.scoreDocs[0].score;
+ for (ScoreDoc scoreDoc : largeTopDocs.scoreDocs) {
assert scoreDoc.score <= preScore;
preScore = scoreDoc.score;
}
}
}
+ public void testInvalidNumHitsInConstructor() {
+ expectThrows(IllegalArgumentException.class, () -> new
LargeNumHitsTopDocsCollectorManager(0));
+ expectThrows(IllegalArgumentException.class, () -> new
LargeNumHitsTopDocsCollectorManager(-1));
+ }
+
+ public void testReduceWithZeroHitCollector() throws IOException {
+ // reduce() must skip collectors with 0 hits without throwing
IllegalArgumentException.
+ Directory localDir = newDirectory();
+ IndexWriter writer = new IndexWriter(localDir, newIndexWriterConfig());
+ Document doc = new Document();
+ doc.add(newStringField("field", "hit", Field.Store.NO));
+ writer.addDocument(doc);
+ writer.commit();
+ writer.addDocument(new Document());
+ writer.commit();
+ writer.close();
Review Comment:
Those two segments may even get merged into one in some situations, as the
merge policy gets randomized through `newIndexWriterConfig`.
Would the scenario you are testing for be covered by the existings
randomizations, at least in some of the runs, or not at all?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]