Skip to content

Commit 8a7d484

Browse files
authored
Remove usage of TopScoreDocCollector + TopFieldCollector deprecated methods (#create, #createSharedManager) (#13500)
These methods were deprecated in #240 which is part of Lucene 10.0. Addresses #13499
1 parent 481ca2d commit 8a7d484

File tree

14 files changed

+61
-54
lines changed

14 files changed

+61
-54
lines changed

lucene/CHANGES.txt

+2
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ Other
244244

245245
* GITHUB#13332: Improve MissingDoclet linter to check records correctly. (Uwe Schindler)
246246

247+
* GITHUB#13499: Remove usage of TopScoreDocCollector + TopFieldCollector deprecated methods (#create, #createSharedManager) (Jakub Slowinski)
248+
247249
======================== Lucene 9.12.0 =======================
248250

249251
API Changes

lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.apache.lucene.benchmark.byTask.feeds.QueryMaker;
2121
import org.apache.lucene.benchmark.byTask.utils.Config;
2222
import org.apache.lucene.search.Collector;
23-
import org.apache.lucene.search.TopScoreDocCollector;
23+
import org.apache.lucene.search.TopScoreDocCollectorManager;
2424

2525
/** Does search w/ a custom collector */
2626
public class SearchWithCollectorTask extends SearchTask {
@@ -49,7 +49,8 @@ public boolean withCollector() {
4949
protected Collector createCollector() throws Exception {
5050
Collector collector = null;
5151
if (clnName.equalsIgnoreCase("topScoreDoc") == true) {
52-
collector = TopScoreDocCollector.create(numHits(), Integer.MAX_VALUE);
52+
collector =
53+
new TopScoreDocCollectorManager(numHits(), null, Integer.MAX_VALUE, false).newCollector();
5354
} else if (clnName.length() > 0) {
5455
collector = Class.forName(clnName).asSubclass(Collector.class).getConstructor().newInstance();
5556

lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
/**
3131
* A {@link Collector} that sorts by {@link SortField} using {@link FieldComparator}s.
3232
*
33-
* <p>See the {@link #create(org.apache.lucene.search.Sort, int, int)} method for instantiating a
34-
* TopFieldCollector.
33+
* <p>See the constructor of {@link TopFieldCollectorManager} for instantiating a
34+
* TopFieldCollectorManager with support for concurrency in IndexSearcher.
3535
*
3636
* @lucene.experimental
3737
*/

lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ static class MyCollector extends FilterCollector {
156156
private final Set<Scorer> tqsSet = new HashSet<>();
157157

158158
MyCollector() {
159-
super(TopScoreDocCollector.create(10, Integer.MAX_VALUE));
159+
super(new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector());
160160
}
161161

162162
@Override

lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private void runTest(boolean reversed) throws Throwable {
9898

9999
TopDocs topDocs =
100100
searcher.search(
101-
newq.build(), TopFieldCollector.createSharedManager(sort, 50, null, Integer.MAX_VALUE));
101+
newq.build(), new TopFieldCollectorManager(sort, 50, null, Integer.MAX_VALUE, true));
102102
int nDocsReturned = topDocs.scoreDocs.length;
103103

104104
assertEquals(4, nDocsReturned);

lucene/core/src/test/org/apache/lucene/search/TestNeedsScores.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void testConstantScoreQuery() throws Exception {
8282

8383
TopDocs hits =
8484
searcher.search(
85-
constantScore, TopScoreDocCollector.createSharedManager(5, null, Integer.MAX_VALUE));
85+
constantScore, new TopScoreDocCollectorManager(5, null, Integer.MAX_VALUE, true));
8686
assertEquals(5, hits.totalHits.value);
8787

8888
// Queries that support dynamic pruning like top-score or top-doc queries that do not compute

lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ public void testNegativeScores() throws Exception {
109109
IndexReader ir = writer.getReader();
110110
writer.close();
111111
Scorer s = new SimpleScorer();
112-
TopDocsCollector<ScoreDoc> tdc = TopScoreDocCollector.create(scores.length, Integer.MAX_VALUE);
112+
TopDocsCollector<ScoreDoc> tdc =
113+
new TopScoreDocCollectorManager(scores.length, null, Integer.MAX_VALUE, false)
114+
.newCollector();
113115
Collector c = new PositiveScoresOnlyCollector(tdc);
114116
LeafCollector ac = c.getLeafCollector(ir.leaves().get(0));
115117
ac.setScorer(s);

lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java

+7-13
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,13 @@ void assertQuery(Query query, Sort sort) throws Exception {
231231
final boolean doScores;
232232
final CollectorManager<?, ? extends TopDocs> allManager;
233233
if (sort == null) {
234-
allManager = TopScoreDocCollector.createSharedManager(maxDoc, null, Integer.MAX_VALUE);
234+
allManager = new TopScoreDocCollectorManager(maxDoc, null, Integer.MAX_VALUE);
235235
doScores = false;
236236
} else if (sort == Sort.RELEVANCE) {
237-
allManager = TopFieldCollector.createSharedManager(sort, maxDoc, null, Integer.MAX_VALUE);
237+
allManager = new TopFieldCollectorManager(sort, maxDoc, null, Integer.MAX_VALUE, true);
238238
doScores = true;
239239
} else {
240-
allManager = TopFieldCollector.createSharedManager(sort, maxDoc, null, Integer.MAX_VALUE);
240+
allManager = new TopFieldCollectorManager(sort, maxDoc, null, Integer.MAX_VALUE, true);
241241
doScores = random().nextBoolean();
242242
}
243243
all = searcher.search(query, allManager);
@@ -269,20 +269,14 @@ void assertQuery(Query query, Sort sort) throws Exception {
269269
System.out.println(" iter lastBottom=" + lastBottom);
270270
}
271271
pagedManager =
272-
TopScoreDocCollector.createSharedManager(pageSize, lastBottom, Integer.MAX_VALUE);
272+
new TopScoreDocCollectorManager(pageSize, lastBottom, Integer.MAX_VALUE, true);
273273
} else {
274274
if (VERBOSE) {
275275
System.out.println(" iter lastBottom=" + lastBottom);
276276
}
277-
if (sort == Sort.RELEVANCE) {
278-
pagedManager =
279-
TopFieldCollector.createSharedManager(
280-
sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE);
281-
} else {
282-
pagedManager =
283-
TopFieldCollector.createSharedManager(
284-
sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE);
285-
}
277+
pagedManager =
278+
new TopFieldCollectorManager(
279+
sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE, true);
286280
}
287281
paged = searcher.search(query, pagedManager);
288282
if (doScores) {

lucene/core/src/test/org/apache/lucene/search/TestSortOptimization.java

+11-11
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ public void testSortOptimizationWithMissingValues() throws IOException {
237237
sortField2.setMissingValue(0L); // set a competitive missing value
238238
final Sort sort = new Sort(sortField1, sortField2);
239239
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
240-
TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold);
240+
new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true);
241241
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
242242
assertEquals(topDocs.scoreDocs.length, numHits);
243243
assertEquals(
@@ -264,7 +264,7 @@ public void testSortOptimizationWithMissingValues() throws IOException {
264264
sortField.setMissingValue(Long.MAX_VALUE); // set a competitive missing value
265265
final Sort sort = new Sort(sortField);
266266
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
267-
TopFieldCollector.createSharedManager(sort, numHits, after, totalHitsThreshold);
267+
new TopFieldCollectorManager(sort, numHits, after, totalHitsThreshold, true);
268268
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
269269
assertEquals(topDocs.scoreDocs.length, numHits);
270270
assertNonCompetitiveHitsAreSkipped(topDocs.totalHits.value, numDocs);
@@ -279,7 +279,7 @@ public void testSortOptimizationWithMissingValues() throws IOException {
279279
sortField.setMissingValue(Long.MAX_VALUE); // set a competitive missing value
280280
final Sort sort = new Sort(sortField);
281281
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
282-
TopFieldCollector.createSharedManager(sort, numHits, after, totalHitsThreshold);
282+
new TopFieldCollectorManager(sort, numHits, after, totalHitsThreshold, true);
283283
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
284284
assertEquals(topDocs.scoreDocs.length, numHits);
285285
assertNonCompetitiveHitsAreSkipped(topDocs.totalHits.value, numDocs);
@@ -323,7 +323,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti
323323
sortField.setMissingValue(0L); // missing value is not competitive
324324
final Sort sort = new Sort(sortField);
325325
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
326-
TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold);
326+
new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true);
327327
topDocs1 = searcher.search(new MatchAllDocsQuery(), manager);
328328
assertNonCompetitiveHitsAreSkipped(topDocs1.totalHits.value, numDocs);
329329
}
@@ -334,7 +334,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti
334334
final Sort sort = new Sort(sortField);
335335
sortField.setOptimizeSortWithPoints(false);
336336
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
337-
TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold);
337+
new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true);
338338
topDocs2 = searcher.search(new MatchAllDocsQuery(), manager);
339339
// assert that the resulting hits are the same
340340
assertEquals(topDocs1.scoreDocs.length, topDocs2.scoreDocs.length);
@@ -357,7 +357,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti
357357
sortField2.setMissingValue(0L); // missing value is not competitive
358358
final Sort multiSorts = new Sort(new SortField[] {sortField1, sortField2});
359359
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
360-
TopFieldCollector.createSharedManager(multiSorts, numHits, null, totalHitsThreshold);
360+
new TopFieldCollectorManager(multiSorts, numHits, null, totalHitsThreshold, true);
361361
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
362362
// can't optimization with NumericDocValues when there are multiple comparators
363363
assertEquals(topDocs.totalHits.value, numDocs);
@@ -935,7 +935,7 @@ public void testRandomLong() throws IOException {
935935
// test search
936936
int numHits = 1 + random().nextInt(100);
937937
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
938-
TopFieldCollector.createSharedManager(new Sort(sortField), numHits, null, numHits);
938+
new TopFieldCollectorManager(new Sort(sortField), numHits, null, numHits, true);
939939
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
940940
for (int i = 0; i < topDocs.scoreDocs.length; i++) {
941941
long expectedSeqNo = seqNos.get(i);
@@ -986,12 +986,12 @@ public void testSortOptimizationOnSortedNumericField() throws IOException {
986986
int expectedHits = Math.min(numDocs - visitedHits, batch);
987987

988988
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
989-
TopFieldCollector.createSharedManager(sort, batch, (FieldDoc) after, totalHitsThreshold);
989+
new TopFieldCollectorManager(sort, batch, (FieldDoc) after, totalHitsThreshold, true);
990990
TopDocs topDocs = searcher.search(query, manager);
991991
ScoreDoc[] scoreDocs = topDocs.scoreDocs;
992992

993993
CollectorManager<TopFieldCollector, TopFieldDocs> manager2 =
994-
TopFieldCollector.createSharedManager(sort2, batch, (FieldDoc) after, totalHitsThreshold);
994+
new TopFieldCollectorManager(sort2, batch, (FieldDoc) after, totalHitsThreshold, true);
995995
TopDocs topDocs2 = searcher.search(query, manager2);
996996
ScoreDoc[] scoreDocs2 = topDocs2.scoreDocs;
997997

@@ -1186,7 +1186,7 @@ public void doTestStringSortOptimizationDisabled(DirectoryReader reader) throws
11861186
final int totalHitsThreshold = 5;
11871187

11881188
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
1189-
TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold);
1189+
new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true);
11901190
IndexSearcher searcher =
11911191
newSearcher(reader, random().nextBoolean(), random().nextBoolean(), false);
11921192
TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager);
@@ -1216,7 +1216,7 @@ private TopDocs assertSearchHits(DirectoryReader reader, Sort sort, int n, Field
12161216
IndexSearcher searcher = newSearcher(reader, true, true, false);
12171217
Query query = new MatchAllDocsQuery();
12181218
CollectorManager<TopFieldCollector, TopFieldDocs> manager =
1219-
TopFieldCollector.createSharedManager(sort, n, after, n);
1219+
new TopFieldCollectorManager(sort, n, after, n, true);
12201220
TopDocs topDocs = searcher.search(query, manager);
12211221
IndexSearcher unoptimizedSearcher =
12221222
newSearcher(new NoIndexDirectoryReader(reader), true, true, false);

lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public void search(Weight weight, Collector collector) throws IOException {
5555
}
5656

5757
public TopDocs search(Weight weight, int topN) throws IOException {
58-
TopScoreDocCollector collector = TopScoreDocCollector.create(topN, Integer.MAX_VALUE);
58+
TopScoreDocCollector collector =
59+
new TopScoreDocCollectorManager(topN, null, Integer.MAX_VALUE, false).newCollector();
5960
search(ctx, weight, collector);
6061
return collector.topDocs();
6162
}
@@ -346,7 +347,9 @@ void testSort(boolean useFrom) throws Exception {
346347
if (sort == null) {
347348
subHits = subSearcher.search(w, numHits);
348349
} else {
349-
final TopFieldCollector c = TopFieldCollector.create(sort, numHits, Integer.MAX_VALUE);
350+
final TopFieldCollector c =
351+
new TopFieldCollectorManager(sort, numHits, null, Integer.MAX_VALUE, false)
352+
.newCollector();
350353
subSearcher.search(w, c);
351354
subHits = c.topDocs(0, numHits);
352355
}

lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java

+6-7
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@
3434
import org.apache.lucene.search.TopDocs;
3535
import org.apache.lucene.search.TopDocsCollector;
3636
import org.apache.lucene.search.TopFieldCollector;
37+
import org.apache.lucene.search.TopFieldCollectorManager;
3738
import org.apache.lucene.search.TopFieldDocs;
38-
import org.apache.lucene.search.TopScoreDocCollector;
39+
import org.apache.lucene.search.TopScoreDocCollectorManager;
3940
import org.apache.lucene.search.TotalHitCountCollector;
4041
import org.apache.lucene.search.TotalHits;
4142
import org.apache.lucene.util.ArrayUtil;
@@ -253,13 +254,11 @@ private static TopDocs doSearch(
253254
throw new IllegalArgumentException("after must be a FieldDoc; got " + after);
254255
}
255256
hitsCollector =
256-
TopFieldCollector.create(
257-
sort,
258-
n,
259-
(FieldDoc) after,
260-
Integer.MAX_VALUE); // TODO: can we disable exact hit counts
257+
new TopFieldCollectorManager(sort, n, (FieldDoc) after, Integer.MAX_VALUE, false)
258+
.newCollector(); // TODO: can we disable exact hit counts
261259
} else {
262-
hitsCollector = TopScoreDocCollector.create(n, after, Integer.MAX_VALUE);
260+
hitsCollector =
261+
new TopScoreDocCollectorManager(n, after, Integer.MAX_VALUE, false).newCollector();
263262
}
264263
searcher.search(q, MultiCollector.wrap(hitsCollector, fc));
265264

lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
import org.apache.lucene.search.SortField;
3333
import org.apache.lucene.search.TopDocs;
3434
import org.apache.lucene.search.TopDocsCollector;
35-
import org.apache.lucene.search.TopFieldCollector;
36-
import org.apache.lucene.search.TopScoreDocCollector;
35+
import org.apache.lucene.search.TopFieldCollectorManager;
36+
import org.apache.lucene.search.TopScoreDocCollectorManager;
3737
import org.apache.lucene.search.TotalHits;
3838
import org.apache.lucene.search.Weight;
3939
import org.apache.lucene.util.ArrayUtil;
@@ -294,12 +294,15 @@ public TopGroups<?> getTopGroups(
294294
throw new IllegalArgumentException(
295295
"cannot sort by relevance within group: needsScores=false");
296296
}
297-
collector = TopScoreDocCollector.create(maxDocsPerGroup, Integer.MAX_VALUE);
297+
collector =
298+
new TopScoreDocCollectorManager(maxDocsPerGroup, null, Integer.MAX_VALUE, false)
299+
.newCollector();
298300
} else {
299301
// Sort by fields
300302
collector =
301-
TopFieldCollector.create(
302-
withinGroupSort, maxDocsPerGroup, Integer.MAX_VALUE); // TODO: disable exact counts?
303+
new TopFieldCollectorManager(
304+
withinGroupSort, maxDocsPerGroup, null, Integer.MAX_VALUE, false)
305+
.newCollector(); // TODO: disable exact counts?
303306
}
304307

305308
float groupMaxScore = needsScores ? Float.NEGATIVE_INFINITY : Float.NaN;

lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroupsCollector.java

+9-6
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
import org.apache.lucene.search.TopDocs;
3232
import org.apache.lucene.search.TopDocsCollector;
3333
import org.apache.lucene.search.TopFieldCollector;
34-
import org.apache.lucene.search.TopScoreDocCollector;
34+
import org.apache.lucene.search.TopFieldCollectorManager;
35+
import org.apache.lucene.search.TopScoreDocCollectorManager;
3536
import org.apache.lucene.util.ArrayUtil;
3637

3738
/**
@@ -127,15 +128,17 @@ private static class TopDocsReducer<T> extends GroupReducer<T, TopDocsAndMaxScor
127128
supplier =
128129
() ->
129130
new TopDocsAndMaxScoreCollector(
130-
true, TopScoreDocCollector.create(maxDocsPerGroup, Integer.MAX_VALUE), null);
131+
true,
132+
new TopScoreDocCollectorManager(maxDocsPerGroup, null, Integer.MAX_VALUE, false)
133+
.newCollector(),
134+
null);
131135
} else {
132136
supplier =
133137
() -> {
134138
TopFieldCollector topDocsCollector =
135-
TopFieldCollector.create(
136-
withinGroupSort,
137-
maxDocsPerGroup,
138-
Integer.MAX_VALUE); // TODO: disable exact counts?
139+
new TopFieldCollectorManager(
140+
withinGroupSort, maxDocsPerGroup, null, Integer.MAX_VALUE, false)
141+
.newCollector(); // TODO: disable exact counts?
139142
MaxScoreCollector maxScoreCollector = getMaxScores ? new MaxScoreCollector() : null;
140143
return new TopDocsAndMaxScoreCollector(false, topDocsCollector, maxScoreCollector);
141144
};

lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ public void testRandomOrdinalsJoin() throws Exception {
468468

469469
final BitSet actualResult = new FixedBitSet(indexSearcher.getIndexReader().maxDoc());
470470
final TopScoreDocCollector topScoreDocCollector =
471-
TopScoreDocCollector.create(10, Integer.MAX_VALUE);
471+
new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector();
472472
indexSearcher.search(
473473
joinQuery, MultiCollector.wrap(new BitSetCollector(actualResult), topScoreDocCollector));
474474
assertBitSet(expectedResult, actualResult, indexSearcher);
@@ -1546,7 +1546,7 @@ private void executeRandomJoin(
15461546
// be also testing TopDocsCollector...
15471547
final BitSet actualResult = new FixedBitSet(indexSearcher.getIndexReader().maxDoc());
15481548
final TopScoreDocCollector topScoreDocCollector =
1549-
TopScoreDocCollector.create(10, Integer.MAX_VALUE);
1549+
new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector();
15501550
indexSearcher.search(
15511551
joinQuery,
15521552
MultiCollector.wrap(new BitSetCollector(actualResult), topScoreDocCollector));

0 commit comments

Comments
 (0)