Skip to content

Commit

Permalink
LUCENE-10002: Replace test usages of TopScoreDocCollector with a corr…
Browse files Browse the repository at this point in the history
…esponding collector manager (#716)

In the effort or replacing usages of IndexSearcher#search(Query, Collector) with IndexSearcher#search(Query, CollectorManager), this commit replaces many test usages of TopScoreDocCollector with its corresponding CollectorManager created by calling TopScoreDocCollector#createSharedManager.
  • Loading branch information
javanna authored and jpountz committed Mar 2, 2022
1 parent 4c9c1c0 commit bfe7096
Show file tree
Hide file tree
Showing 16 changed files with 243 additions and 245 deletions.
Expand Up @@ -23,6 +23,7 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.search.CollectorManager;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query;
Expand Down Expand Up @@ -100,9 +101,9 @@ public void testBasics() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 10, 10, pivotDistance);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

double distance1 =
Expand Down Expand Up @@ -140,9 +141,8 @@ public void testBasics() throws IOException {
9);

q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 9, 9, pivotDistance);
collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
topHits = collector.topDocs();
manager = TopScoreDocCollector.createSharedManager(2, null, 1);
topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);
CheckHits.checkExplanations(q, "", searcher);

Expand Down Expand Up @@ -198,9 +198,9 @@ public void testCrossesDateLine() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 0, 179, pivotDistance);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

double distance1 =
Expand Down Expand Up @@ -265,9 +265,9 @@ public void testMissingValue() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 10, 10, 5);
TopScoreDocCollector collector = TopScoreDocCollector.create(3, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(3, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

double distance1 =
Expand Down Expand Up @@ -345,9 +345,9 @@ public void testMultiValued() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LatLonPoint.newDistanceFeatureQuery("foo", 3, 0, 0, 200);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

double distance1 =
Expand All @@ -372,9 +372,8 @@ public void testMultiValued() throws IOException {
topHits.scoreDocs);

q = LatLonPoint.newDistanceFeatureQuery("foo", 3, -90, 0, 10000.);
collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
topHits = collector.topDocs();
manager = TopScoreDocCollector.createSharedManager(2, null, 1);
topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);
CheckHits.checkExplanations(q, "", searcher);

Expand Down
Expand Up @@ -21,6 +21,7 @@
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.search.CollectorManager;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
Expand Down Expand Up @@ -89,9 +90,9 @@ public void testBasics() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LongPoint.newDistanceFeatureQuery("foo", 3, 10, 5);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

CheckHits.checkEqual(
Expand All @@ -103,9 +104,8 @@ public void testBasics() throws IOException {
topHits.scoreDocs);

q = LongPoint.newDistanceFeatureQuery("foo", 3, 7, 5);
collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
topHits = collector.topDocs();
manager = TopScoreDocCollector.createSharedManager(2, null, 1);
topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);
CheckHits.checkExplanations(q, "", searcher);

Expand Down Expand Up @@ -159,9 +159,9 @@ public void testOverUnderFlow() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LongPoint.newDistanceFeatureQuery("foo", 3, Long.MAX_VALUE - 1, 100);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

CheckHits.checkEqual(
Expand All @@ -181,9 +181,7 @@ public void testOverUnderFlow() throws IOException {
topHits.scoreDocs);

q = LongPoint.newDistanceFeatureQuery("foo", 3, Long.MIN_VALUE + 1, 100);
collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
topHits = collector.topDocs();
topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);
CheckHits.checkExplanations(q, "", searcher);

Expand Down Expand Up @@ -244,9 +242,9 @@ public void testMissingValue() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LongPoint.newDistanceFeatureQuery("foo", 3, 10, 5);
TopScoreDocCollector collector = TopScoreDocCollector.create(3, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(3, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

CheckHits.checkEqual(
Expand Down Expand Up @@ -311,9 +309,9 @@ public void testMultiValued() throws IOException {
IndexSearcher searcher = newSearcher(reader);

Query q = LongPoint.newDistanceFeatureQuery("foo", 3, 10, 5);
TopScoreDocCollector collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
TopDocs topHits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(2, null, 1);
TopDocs topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);

CheckHits.checkEqual(
Expand All @@ -325,9 +323,8 @@ public void testMultiValued() throws IOException {
topHits.scoreDocs);

q = LongPoint.newDistanceFeatureQuery("foo", 3, 7, 5);
collector = TopScoreDocCollector.create(2, null, 1);
searcher.search(q, collector);
topHits = collector.topDocs();
manager = TopScoreDocCollector.createSharedManager(2, null, 1);
topHits = searcher.search(q, manager);
assertEquals(2, topHits.scoreDocs.length);
CheckHits.checkExplanations(q, "", searcher);

Expand Down
Expand Up @@ -23,6 +23,7 @@
import java.util.concurrent.CountDownLatch;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.search.CollectorManager;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
Expand Down Expand Up @@ -66,9 +67,9 @@ public void testExactlyAtTrueLimit() throws Exception {
assertEquals(IndexWriter.MAX_DOCS, ir.maxDoc());
assertEquals(IndexWriter.MAX_DOCS, ir.numDocs());
IndexSearcher searcher = new IndexSearcher(ir);
TopScoreDocCollector collector = TopScoreDocCollector.create(10, Integer.MAX_VALUE);
searcher.search(new TermQuery(new Term("field", "text")), collector);
TopDocs hits = collector.topDocs();
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(10, null, Integer.MAX_VALUE);
TopDocs hits = searcher.search(new TermQuery(new Term("field", "text")), manager);
assertEquals(IndexWriter.MAX_DOCS, hits.totalHits.value);

// Sort by docID reversed:
Expand Down
29 changes: 13 additions & 16 deletions lucene/core/src/test/org/apache/lucene/search/TestBoolean2.java
Expand Up @@ -236,32 +236,29 @@ public void queriesTest(Query query, int[] expDocNrs) throws Exception {
// The asserting searcher will sometimes return the bulk scorer and
// sometimes return a default impl around the scorer so that we can
// compare BS1 and BS2
TopScoreDocCollector collector = TopScoreDocCollector.create(topDocsToCheck, Integer.MAX_VALUE);
searcher.search(query, collector);
ScoreDoc[] hits1 = collector.topDocs().scoreDocs;
collector = TopScoreDocCollector.create(topDocsToCheck, Integer.MAX_VALUE);
searcher.search(query, collector);
ScoreDoc[] hits2 = collector.topDocs().scoreDocs;
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(topDocsToCheck, null, Integer.MAX_VALUE);
ScoreDoc[] hits1 = searcher.search(query, manager).scoreDocs;
manager = TopScoreDocCollector.createSharedManager(topDocsToCheck, null, Integer.MAX_VALUE);
ScoreDoc[] hits2 = searcher.search(query, manager).scoreDocs;

CheckHits.checkHitsQuery(query, hits1, hits2, expDocNrs);

// Since we have no deleted docs, we should also be able to verify identical matches &
// scores against an single segment copy of our index
collector = TopScoreDocCollector.create(topDocsToCheck, Integer.MAX_VALUE);
singleSegmentSearcher.search(query, collector);
hits2 = collector.topDocs().scoreDocs;
manager = TopScoreDocCollector.createSharedManager(topDocsToCheck, null, Integer.MAX_VALUE);
TopDocs topDocs = singleSegmentSearcher.search(query, manager);
hits2 = topDocs.scoreDocs;
CheckHits.checkHitsQuery(query, hits1, hits2, expDocNrs);

// sanity check expected num matches in bigSearcher
assertEquals(mulFactor * collector.totalHits, bigSearcher.count(query));
assertEquals(mulFactor * topDocs.totalHits.value, bigSearcher.count(query));

// now check 2 diff scorers from the bigSearcher as well
collector = TopScoreDocCollector.create(topDocsToCheck, Integer.MAX_VALUE);
bigSearcher.search(query, collector);
hits1 = collector.topDocs().scoreDocs;
collector = TopScoreDocCollector.create(topDocsToCheck, Integer.MAX_VALUE);
bigSearcher.search(query, collector);
hits2 = collector.topDocs().scoreDocs;
manager = TopScoreDocCollector.createSharedManager(topDocsToCheck, null, Integer.MAX_VALUE);
hits1 = bigSearcher.search(query, manager).scoreDocs;
manager = TopScoreDocCollector.createSharedManager(topDocsToCheck, null, Integer.MAX_VALUE);
hits2 = bigSearcher.search(query, manager).scoreDocs;

// NOTE: just comparing results, not vetting against expDocNrs
// since we have dups in bigSearcher
Expand Down
Expand Up @@ -92,9 +92,9 @@ public void verifyNrHits(Query q, int expected) throws Exception {
assertEquals("result count", expected, h.length);
// System.out.println("TEST: now check");
// bs2
TopScoreDocCollector collector = TopScoreDocCollector.create(1000, Integer.MAX_VALUE);
s.search(q, collector);
ScoreDoc[] h2 = collector.topDocs().scoreDocs;
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(1000, null, Integer.MAX_VALUE);
ScoreDoc[] h2 = s.search(q, manager).scoreDocs;
if (expected != h2.length) {
printHits(getTestName(), h2, s);
}
Expand Down
Expand Up @@ -240,20 +240,22 @@ public void testEarlyTermination() throws IOException {

IndexSearcher is = newSearcher(ir);

TopScoreDocCollector c = TopScoreDocCollector.create(10, null, 10);
is.search(new ConstantScoreQuery(new TermQuery(new Term("key", "foo"))), c);
assertEquals(11, c.totalHits);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, c.totalHitsRelation);

c = TopScoreDocCollector.create(10, null, 10);
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(10, null, 10);
TopDocs topDocs =
is.search(new ConstantScoreQuery(new TermQuery(new Term("key", "foo"))), manager);
assertEquals(11, topDocs.totalHits.value);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, topDocs.totalHits.relation);

manager = TopScoreDocCollector.createSharedManager(10, null, 10);
Query query =
new BooleanQuery.Builder()
.add(new ConstantScoreQuery(new TermQuery(new Term("key", "foo"))), Occur.SHOULD)
.add(new ConstantScoreQuery(new TermQuery(new Term("key", "bar"))), Occur.FILTER)
.build();
is.search(query, c);
assertEquals(11, c.totalHits);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, c.totalHitsRelation);
topDocs = is.search(query, manager);
assertEquals(11, topDocs.totalHits.value);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, topDocs.totalHits.relation);

iw.close();
ir.close();
Expand Down
Expand Up @@ -118,17 +118,16 @@ public void testEarlyTermination() throws IOException {
IndexSearcher is = newSearcher(ir);

final int totalHitsThreshold = 200;
TopScoreDocCollector c = TopScoreDocCollector.create(10, null, totalHitsThreshold);

is.search(new MatchAllDocsQuery(), c);
assertEquals(totalHitsThreshold + 1, c.totalHits);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, c.totalHitsRelation);

TopScoreDocCollector c1 = TopScoreDocCollector.create(10, null, numDocs);

is.search(new MatchAllDocsQuery(), c1);
assertEquals(numDocs, c1.totalHits);
assertEquals(TotalHits.Relation.EQUAL_TO, c1.totalHitsRelation);
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(10, null, totalHitsThreshold);
TopDocs topDocs = is.search(new MatchAllDocsQuery(), manager);
assertEquals(totalHitsThreshold + 1, topDocs.totalHits.value);
assertEquals(TotalHits.Relation.GREATER_THAN_OR_EQUAL_TO, topDocs.totalHits.relation);

manager = TopScoreDocCollector.createSharedManager(10, null, numDocs);
topDocs = is.search(new MatchAllDocsQuery(), manager);
assertEquals(numDocs, topDocs.totalHits.value);
assertEquals(TotalHits.Relation.EQUAL_TO, topDocs.totalHits.relation);

iw.close();
ir.close();
Expand Down
38 changes: 20 additions & 18 deletions lucene/core/src/test/org/apache/lucene/search/TestPhraseQuery.java
Expand Up @@ -772,13 +772,13 @@ public void testTopPhrases() throws IOException {
new PhraseQuery("f", "d", "d") // repeated term
)) {
for (int topN = 1; topN <= 2; ++topN) {
TopScoreDocCollector collector1 =
TopScoreDocCollector.create(topN, null, Integer.MAX_VALUE);
searcher.search(query, collector1);
ScoreDoc[] hits1 = collector1.topDocs().scoreDocs;
TopScoreDocCollector collector2 = TopScoreDocCollector.create(topN, null, 1);
searcher.search(query, collector2);
ScoreDoc[] hits2 = collector2.topDocs().scoreDocs;
CollectorManager<TopScoreDocCollector, TopDocs> manager =
TopScoreDocCollector.createSharedManager(topN, null, Integer.MAX_VALUE);
TopDocs topDocs = searcher.search(query, manager);
ScoreDoc[] hits1 = topDocs.scoreDocs;
manager = TopScoreDocCollector.createSharedManager(topN, null, 1);
topDocs = searcher.search(query, manager);
ScoreDoc[] hits2 = topDocs.scoreDocs;
assertTrue("" + query, hits1.length > 0);
CheckHits.checkEqual(query, hits1, hits2);
}
Expand Down Expand Up @@ -1029,25 +1029,27 @@ public void testRandomTopDocs() throws IOException {
for (String secondTerm : new String[] {"a", "b", "c"}) {
Query query = new PhraseQuery("foo", newBytesRef(firstTerm), newBytesRef(secondTerm));

TopScoreDocCollector collector1 =
TopScoreDocCollector.create(10, null, Integer.MAX_VALUE); // COMPLETE
TopScoreDocCollector collector2 = TopScoreDocCollector.create(10, null, 10); // TOP_SCORES
CollectorManager<TopScoreDocCollector, TopDocs> completeManager =
TopScoreDocCollector.createSharedManager(10, null, Integer.MAX_VALUE); // COMPLETE
CollectorManager<TopScoreDocCollector, TopDocs> topScoresManager =
TopScoreDocCollector.createSharedManager(10, null, 10); // TOP_SCORES

searcher.search(query, collector1);
searcher.search(query, collector2);
CheckHits.checkEqual(query, collector1.topDocs().scoreDocs, collector2.topDocs().scoreDocs);
TopDocs complete = searcher.search(query, completeManager);
TopDocs topScores = searcher.search(query, topScoresManager);
CheckHits.checkEqual(query, complete.scoreDocs, topScores.scoreDocs);

Query filteredQuery =
new BooleanQuery.Builder()
.add(query, Occur.MUST)
.add(new TermQuery(new Term("foo", "b")), Occur.FILTER)
.build();

collector1 = TopScoreDocCollector.create(10, null, Integer.MAX_VALUE); // COMPLETE
collector2 = TopScoreDocCollector.create(10, null, 10); // TOP_SCORES
searcher.search(filteredQuery, collector1);
searcher.search(filteredQuery, collector2);
CheckHits.checkEqual(query, collector1.topDocs().scoreDocs, collector2.topDocs().scoreDocs);
completeManager =
TopScoreDocCollector.createSharedManager(10, null, Integer.MAX_VALUE); // COMPLETE
topScoresManager = TopScoreDocCollector.createSharedManager(10, null, 10); // TOP_SCORES
complete = searcher.search(filteredQuery, completeManager);
topScores = searcher.search(filteredQuery, topScoresManager);
CheckHits.checkEqual(query, complete.scoreDocs, topScores.scoreDocs);
}
}
reader.close();
Expand Down

0 comments on commit bfe7096

Please sign in to comment.