gaobinlong commented on code in PR #15660:
URL: https://github.com/apache/lucene/pull/15660#discussion_r3223375041
##########
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:
The index writer used here is to make sure we generate 2 segments, one
segment would have non-zero search hits, another segment would have zero search
hits because no document containing the search field; the custom executor is to
force one collector per segment, if not the 2 segments may share one collector,
then the zero search hits in one collector test case wouldn't be covered.
--
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]