diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index b761a4fa0581..8c1abff96989 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -244,6 +244,8 @@ Other * GITHUB#13332: Improve MissingDoclet linter to check records correctly. (Uwe Schindler) +* GITHUB#13499: Remove usage of TopScoreDocCollector + TopFieldCollector deprecated methods (#create, #createSharedManager) (Jakub Slowinski) + ======================== Lucene 9.12.0 ======================= API Changes diff --git a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java index 9f79e51d5057..f41994f48d63 100644 --- a/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java +++ b/lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/tasks/SearchWithCollectorTask.java @@ -20,7 +20,7 @@ import org.apache.lucene.benchmark.byTask.feeds.QueryMaker; import org.apache.lucene.benchmark.byTask.utils.Config; import org.apache.lucene.search.Collector; -import org.apache.lucene.search.TopScoreDocCollector; +import org.apache.lucene.search.TopScoreDocCollectorManager; /** Does search w/ a custom collector */ public class SearchWithCollectorTask extends SearchTask { @@ -49,7 +49,8 @@ public boolean withCollector() { protected Collector createCollector() throws Exception { Collector collector = null; if (clnName.equalsIgnoreCase("topScoreDoc") == true) { - collector = TopScoreDocCollector.create(numHits(), Integer.MAX_VALUE); + collector = + new TopScoreDocCollectorManager(numHits(), null, Integer.MAX_VALUE, false).newCollector(); } else if (clnName.length() > 0) { collector = Class.forName(clnName).asSubclass(Collector.class).getConstructor().newInstance(); diff --git a/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java b/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java index fcb14e1feef4..1f4e840400f0 100644 --- a/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java +++ b/lucene/core/src/java/org/apache/lucene/search/TopFieldCollector.java @@ -30,8 +30,8 @@ /** * A {@link Collector} that sorts by {@link SortField} using {@link FieldComparator}s. * - *

See the {@link #create(org.apache.lucene.search.Sort, int, int)} method for instantiating a - * TopFieldCollector. + *

See the constructor of {@link TopFieldCollectorManager} for instantiating a + * TopFieldCollectorManager with support for concurrency in IndexSearcher. * * @lucene.experimental */ diff --git a/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java b/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java index 68c4c6f8f190..b291a96c8024 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestBooleanQueryVisitSubscorers.java @@ -156,7 +156,7 @@ static class MyCollector extends FilterCollector { private final Set tqsSet = new HashSet<>(); MyCollector() { - super(TopScoreDocCollector.create(10, Integer.MAX_VALUE)); + super(new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector()); } @Override diff --git a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java index 075be5918e98..46ab7ad420b5 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestElevationComparator.java @@ -98,7 +98,7 @@ private void runTest(boolean reversed) throws Throwable { TopDocs topDocs = searcher.search( - newq.build(), TopFieldCollector.createSharedManager(sort, 50, null, Integer.MAX_VALUE)); + newq.build(), new TopFieldCollectorManager(sort, 50, null, Integer.MAX_VALUE, true)); int nDocsReturned = topDocs.scoreDocs.length; assertEquals(4, nDocsReturned); diff --git a/lucene/core/src/test/org/apache/lucene/search/TestNeedsScores.java b/lucene/core/src/test/org/apache/lucene/search/TestNeedsScores.java index f36d2edfd973..b8392fefbdb1 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestNeedsScores.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestNeedsScores.java @@ -82,7 +82,7 @@ public void testConstantScoreQuery() throws Exception { TopDocs hits = searcher.search( - constantScore, TopScoreDocCollector.createSharedManager(5, null, Integer.MAX_VALUE)); + constantScore, new TopScoreDocCollectorManager(5, null, Integer.MAX_VALUE, true)); assertEquals(5, hits.totalHits.value); // Queries that support dynamic pruning like top-score or top-doc queries that do not compute diff --git a/lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java b/lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java index c128945bd42f..067c47db7f83 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestPositiveScoresOnlyCollector.java @@ -109,7 +109,9 @@ public void testNegativeScores() throws Exception { IndexReader ir = writer.getReader(); writer.close(); Scorer s = new SimpleScorer(); - TopDocsCollector tdc = TopScoreDocCollector.create(scores.length, Integer.MAX_VALUE); + TopDocsCollector tdc = + new TopScoreDocCollectorManager(scores.length, null, Integer.MAX_VALUE, false) + .newCollector(); Collector c = new PositiveScoresOnlyCollector(tdc); LeafCollector ac = c.getLeafCollector(ir.leaves().get(0)); ac.setScorer(s); diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java index a1b7198fa3bf..d0ecb7c1ad12 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestSearchAfter.java @@ -231,13 +231,13 @@ void assertQuery(Query query, Sort sort) throws Exception { final boolean doScores; final CollectorManager allManager; if (sort == null) { - allManager = TopScoreDocCollector.createSharedManager(maxDoc, null, Integer.MAX_VALUE); + allManager = new TopScoreDocCollectorManager(maxDoc, null, Integer.MAX_VALUE); doScores = false; } else if (sort == Sort.RELEVANCE) { - allManager = TopFieldCollector.createSharedManager(sort, maxDoc, null, Integer.MAX_VALUE); + allManager = new TopFieldCollectorManager(sort, maxDoc, null, Integer.MAX_VALUE, true); doScores = true; } else { - allManager = TopFieldCollector.createSharedManager(sort, maxDoc, null, Integer.MAX_VALUE); + allManager = new TopFieldCollectorManager(sort, maxDoc, null, Integer.MAX_VALUE, true); doScores = random().nextBoolean(); } all = searcher.search(query, allManager); @@ -269,20 +269,14 @@ void assertQuery(Query query, Sort sort) throws Exception { System.out.println(" iter lastBottom=" + lastBottom); } pagedManager = - TopScoreDocCollector.createSharedManager(pageSize, lastBottom, Integer.MAX_VALUE); + new TopScoreDocCollectorManager(pageSize, lastBottom, Integer.MAX_VALUE, true); } else { if (VERBOSE) { System.out.println(" iter lastBottom=" + lastBottom); } - if (sort == Sort.RELEVANCE) { - pagedManager = - TopFieldCollector.createSharedManager( - sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE); - } else { - pagedManager = - TopFieldCollector.createSharedManager( - sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE); - } + pagedManager = + new TopFieldCollectorManager( + sort, pageSize, (FieldDoc) lastBottom, Integer.MAX_VALUE, true); } paged = searcher.search(query, pagedManager); if (doScores) { diff --git a/lucene/core/src/test/org/apache/lucene/search/TestSortOptimization.java b/lucene/core/src/test/org/apache/lucene/search/TestSortOptimization.java index ad955e668ed3..a1c0372cd08b 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestSortOptimization.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestSortOptimization.java @@ -237,7 +237,7 @@ public void testSortOptimizationWithMissingValues() throws IOException { sortField2.setMissingValue(0L); // set a competitive missing value final Sort sort = new Sort(sortField1, sortField2); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); assertEquals(topDocs.scoreDocs.length, numHits); assertEquals( @@ -264,7 +264,7 @@ public void testSortOptimizationWithMissingValues() throws IOException { sortField.setMissingValue(Long.MAX_VALUE); // set a competitive missing value final Sort sort = new Sort(sortField); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, after, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, after, totalHitsThreshold, true); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); assertEquals(topDocs.scoreDocs.length, numHits); assertNonCompetitiveHitsAreSkipped(topDocs.totalHits.value, numDocs); @@ -279,7 +279,7 @@ public void testSortOptimizationWithMissingValues() throws IOException { sortField.setMissingValue(Long.MAX_VALUE); // set a competitive missing value final Sort sort = new Sort(sortField); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, after, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, after, totalHitsThreshold, true); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); assertEquals(topDocs.scoreDocs.length, numHits); assertNonCompetitiveHitsAreSkipped(topDocs.totalHits.value, numDocs); @@ -323,7 +323,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti sortField.setMissingValue(0L); // missing value is not competitive final Sort sort = new Sort(sortField); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true); topDocs1 = searcher.search(new MatchAllDocsQuery(), manager); assertNonCompetitiveHitsAreSkipped(topDocs1.totalHits.value, numDocs); } @@ -334,7 +334,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti final Sort sort = new Sort(sortField); sortField.setOptimizeSortWithPoints(false); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true); topDocs2 = searcher.search(new MatchAllDocsQuery(), manager); // assert that the resulting hits are the same assertEquals(topDocs1.scoreDocs.length, topDocs2.scoreDocs.length); @@ -357,7 +357,7 @@ public void testNumericDocValuesOptimizationWithMissingValues() throws IOExcepti sortField2.setMissingValue(0L); // missing value is not competitive final Sort multiSorts = new Sort(new SortField[] {sortField1, sortField2}); CollectorManager manager = - TopFieldCollector.createSharedManager(multiSorts, numHits, null, totalHitsThreshold); + new TopFieldCollectorManager(multiSorts, numHits, null, totalHitsThreshold, true); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); // can't optimization with NumericDocValues when there are multiple comparators assertEquals(topDocs.totalHits.value, numDocs); @@ -935,7 +935,7 @@ public void testRandomLong() throws IOException { // test search int numHits = 1 + random().nextInt(100); CollectorManager manager = - TopFieldCollector.createSharedManager(new Sort(sortField), numHits, null, numHits); + new TopFieldCollectorManager(new Sort(sortField), numHits, null, numHits, true); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); for (int i = 0; i < topDocs.scoreDocs.length; i++) { long expectedSeqNo = seqNos.get(i); @@ -986,12 +986,12 @@ public void testSortOptimizationOnSortedNumericField() throws IOException { int expectedHits = Math.min(numDocs - visitedHits, batch); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, batch, (FieldDoc) after, totalHitsThreshold); + new TopFieldCollectorManager(sort, batch, (FieldDoc) after, totalHitsThreshold, true); TopDocs topDocs = searcher.search(query, manager); ScoreDoc[] scoreDocs = topDocs.scoreDocs; CollectorManager manager2 = - TopFieldCollector.createSharedManager(sort2, batch, (FieldDoc) after, totalHitsThreshold); + new TopFieldCollectorManager(sort2, batch, (FieldDoc) after, totalHitsThreshold, true); TopDocs topDocs2 = searcher.search(query, manager2); ScoreDoc[] scoreDocs2 = topDocs2.scoreDocs; @@ -1186,7 +1186,7 @@ public void doTestStringSortOptimizationDisabled(DirectoryReader reader) throws final int totalHitsThreshold = 5; CollectorManager manager = - TopFieldCollector.createSharedManager(sort, numHits, null, totalHitsThreshold); + new TopFieldCollectorManager(sort, numHits, null, totalHitsThreshold, true); IndexSearcher searcher = newSearcher(reader, random().nextBoolean(), random().nextBoolean(), false); TopDocs topDocs = searcher.search(new MatchAllDocsQuery(), manager); @@ -1216,7 +1216,7 @@ private TopDocs assertSearchHits(DirectoryReader reader, Sort sort, int n, Field IndexSearcher searcher = newSearcher(reader, true, true, false); Query query = new MatchAllDocsQuery(); CollectorManager manager = - TopFieldCollector.createSharedManager(sort, n, after, n); + new TopFieldCollectorManager(sort, n, after, n, true); TopDocs topDocs = searcher.search(query, manager); IndexSearcher unoptimizedSearcher = newSearcher(new NoIndexDirectoryReader(reader), true, true, false); diff --git a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java index e683b39c3107..353fb66f358b 100644 --- a/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java +++ b/lucene/core/src/test/org/apache/lucene/search/TestTopDocsMerge.java @@ -55,7 +55,8 @@ public void search(Weight weight, Collector collector) throws IOException { } public TopDocs search(Weight weight, int topN) throws IOException { - TopScoreDocCollector collector = TopScoreDocCollector.create(topN, Integer.MAX_VALUE); + TopScoreDocCollector collector = + new TopScoreDocCollectorManager(topN, null, Integer.MAX_VALUE, false).newCollector(); search(ctx, weight, collector); return collector.topDocs(); } @@ -346,7 +347,9 @@ void testSort(boolean useFrom) throws Exception { if (sort == null) { subHits = subSearcher.search(w, numHits); } else { - final TopFieldCollector c = TopFieldCollector.create(sort, numHits, Integer.MAX_VALUE); + final TopFieldCollector c = + new TopFieldCollectorManager(sort, numHits, null, Integer.MAX_VALUE, false) + .newCollector(); subSearcher.search(w, c); subHits = c.topDocs(0, numHits); } diff --git a/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java b/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java index 41db7b6df459..87ad2947cf5c 100644 --- a/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java +++ b/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java @@ -34,8 +34,9 @@ import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.TopDocsCollector; import org.apache.lucene.search.TopFieldCollector; +import org.apache.lucene.search.TopFieldCollectorManager; import org.apache.lucene.search.TopFieldDocs; -import org.apache.lucene.search.TopScoreDocCollector; +import org.apache.lucene.search.TopScoreDocCollectorManager; import org.apache.lucene.search.TotalHitCountCollector; import org.apache.lucene.search.TotalHits; import org.apache.lucene.util.ArrayUtil; @@ -253,13 +254,11 @@ private static TopDocs doSearch( throw new IllegalArgumentException("after must be a FieldDoc; got " + after); } hitsCollector = - TopFieldCollector.create( - sort, - n, - (FieldDoc) after, - Integer.MAX_VALUE); // TODO: can we disable exact hit counts + new TopFieldCollectorManager(sort, n, (FieldDoc) after, Integer.MAX_VALUE, false) + .newCollector(); // TODO: can we disable exact hit counts } else { - hitsCollector = TopScoreDocCollector.create(n, after, Integer.MAX_VALUE); + hitsCollector = + new TopScoreDocCollectorManager(n, after, Integer.MAX_VALUE, false).newCollector(); } searcher.search(q, MultiCollector.wrap(hitsCollector, fc)); diff --git a/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java b/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java index 66972b827ed0..92c420c58372 100644 --- a/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java +++ b/lucene/grouping/src/java/org/apache/lucene/search/grouping/BlockGroupingCollector.java @@ -32,8 +32,8 @@ import org.apache.lucene.search.SortField; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.TopDocsCollector; -import org.apache.lucene.search.TopFieldCollector; -import org.apache.lucene.search.TopScoreDocCollector; +import org.apache.lucene.search.TopFieldCollectorManager; +import org.apache.lucene.search.TopScoreDocCollectorManager; import org.apache.lucene.search.TotalHits; import org.apache.lucene.search.Weight; import org.apache.lucene.util.ArrayUtil; @@ -294,12 +294,15 @@ public TopGroups getTopGroups( throw new IllegalArgumentException( "cannot sort by relevance within group: needsScores=false"); } - collector = TopScoreDocCollector.create(maxDocsPerGroup, Integer.MAX_VALUE); + collector = + new TopScoreDocCollectorManager(maxDocsPerGroup, null, Integer.MAX_VALUE, false) + .newCollector(); } else { // Sort by fields collector = - TopFieldCollector.create( - withinGroupSort, maxDocsPerGroup, Integer.MAX_VALUE); // TODO: disable exact counts? + new TopFieldCollectorManager( + withinGroupSort, maxDocsPerGroup, null, Integer.MAX_VALUE, false) + .newCollector(); // TODO: disable exact counts? } float groupMaxScore = needsScores ? Float.NEGATIVE_INFINITY : Float.NaN; diff --git a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroupsCollector.java b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroupsCollector.java index b3cbb25005c0..00940be58ecc 100644 --- a/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroupsCollector.java +++ b/lucene/grouping/src/java/org/apache/lucene/search/grouping/TopGroupsCollector.java @@ -31,7 +31,8 @@ import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.TopDocsCollector; import org.apache.lucene.search.TopFieldCollector; -import org.apache.lucene.search.TopScoreDocCollector; +import org.apache.lucene.search.TopFieldCollectorManager; +import org.apache.lucene.search.TopScoreDocCollectorManager; import org.apache.lucene.util.ArrayUtil; /** @@ -127,15 +128,17 @@ private static class TopDocsReducer extends GroupReducer new TopDocsAndMaxScoreCollector( - true, TopScoreDocCollector.create(maxDocsPerGroup, Integer.MAX_VALUE), null); + true, + new TopScoreDocCollectorManager(maxDocsPerGroup, null, Integer.MAX_VALUE, false) + .newCollector(), + null); } else { supplier = () -> { TopFieldCollector topDocsCollector = - TopFieldCollector.create( - withinGroupSort, - maxDocsPerGroup, - Integer.MAX_VALUE); // TODO: disable exact counts? + new TopFieldCollectorManager( + withinGroupSort, maxDocsPerGroup, null, Integer.MAX_VALUE, false) + .newCollector(); // TODO: disable exact counts? MaxScoreCollector maxScoreCollector = getMaxScores ? new MaxScoreCollector() : null; return new TopDocsAndMaxScoreCollector(false, topDocsCollector, maxScoreCollector); }; diff --git a/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java b/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java index 1e9fc55c5984..972929e8118e 100644 --- a/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java +++ b/lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java @@ -468,7 +468,7 @@ public void testRandomOrdinalsJoin() throws Exception { final BitSet actualResult = new FixedBitSet(indexSearcher.getIndexReader().maxDoc()); final TopScoreDocCollector topScoreDocCollector = - TopScoreDocCollector.create(10, Integer.MAX_VALUE); + new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector(); indexSearcher.search( joinQuery, MultiCollector.wrap(new BitSetCollector(actualResult), topScoreDocCollector)); assertBitSet(expectedResult, actualResult, indexSearcher); @@ -1546,7 +1546,7 @@ private void executeRandomJoin( // be also testing TopDocsCollector... final BitSet actualResult = new FixedBitSet(indexSearcher.getIndexReader().maxDoc()); final TopScoreDocCollector topScoreDocCollector = - TopScoreDocCollector.create(10, Integer.MAX_VALUE); + new TopScoreDocCollectorManager(10, null, Integer.MAX_VALUE, false).newCollector(); indexSearcher.search( joinQuery, MultiCollector.wrap(new BitSetCollector(actualResult), topScoreDocCollector));