From 04d0170bac86e2b62eabcbaf9be6883025f42e1f Mon Sep 17 00:00:00 2001 From: Luca Cavanna Date: Sat, 7 Sep 2024 11:16:37 +0200 Subject: [PATCH] Deprecate FacetsCollector#search utility methods (#13737) These can now be replaced by the corresponding methods added to FacetsCollectorManager that accept a FacetsCollectorManager as last argument in place of a Collector Relates to #11041 --- lucene/CHANGES.txt | 3 + .../demo/facet/AssociationsFacetsExample.java | 12 +- .../ExpressionAggregationFacetsExample.java | 6 +- .../MultiCategoryListsFacetsExample.java | 6 +- .../lucene/demo/facet/RangeFacetsExample.java | 9 +- .../demo/facet/SimpleFacetsExample.java | 9 +- .../facet/SimpleSortedSetFacetsExample.java | 10 +- .../facet/StringValueFacetCountsExample.java | 6 +- .../lucene/demo/facet/package-info.java | 6 +- .../apache/lucene/facet/FacetsCollector.java | 48 ++++- .../lucene/facet/FacetsCollectorManager.java | 192 +++++++++++++++++- .../org/apache/lucene/facet/package-info.java | 6 +- .../lucene/facet/TestDrillDownQuery.java | 6 +- .../lucene/facet/TestMultipleIndexFields.java | 6 +- .../TestSortedSetDocValuesFacets.java | 20 +- .../TestOrdinalMappingLeafReader.java | 7 +- .../taxonomy/TestTaxonomyFacetCounts.java | 9 +- .../TestTaxonomyFacetValueSource.java | 26 ++- 18 files changed, 327 insertions(+), 60 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index cab28346a8dd..f42a01affe5e 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -24,6 +24,9 @@ API Changes * GITHUB#13568: Add DrillSideways#search method that supports any CollectorManagers for drill-sideways dimensions or drill-down. (Egor Potemkin) +* GITHUB#13737: Deprecate the FacetsCollector#search utility methods and add new corresponding method to + FacetsCollectorManager that accept a FacetsCollectorManager as last argument in place of a Collector. (Luca Cavanna) + New Features --------------------- diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/AssociationsFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/AssociationsFacetsExample.java index f3982d0b5176..cd1084acb316 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/AssociationsFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/AssociationsFacetsExample.java @@ -25,6 +25,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.LabelAndValue; import org.apache.lucene.facet.taxonomy.AssociationAggregationFunction; @@ -97,12 +98,13 @@ private List sumAssociations() throws IOException { IndexSearcher searcher = new IndexSearcher(indexReader); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); - FacetsCollector fc = new FacetsCollector(); - // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollectorManager.FacetsResult facetsResult = + FacetsCollectorManager.search( + searcher, new MatchAllDocsQuery(), 10, new FacetsCollectorManager()); + FacetsCollector fc = facetsResult.facetsCollector(); Facets tags = new TaxonomyFacetIntAssociations( @@ -133,8 +135,8 @@ private FacetResult drillDown() throws IOException { // Now user drills down on Publish Date/2010: q.add("tags", "solr"); - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, q, 10, fc); + FacetsCollectorManager fcm = new FacetsCollectorManager(); + FacetsCollector fc = FacetsCollectorManager.search(searcher, q, 10, fcm).facetsCollector(); // Retrieve results Facets facets = diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/ExpressionAggregationFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/ExpressionAggregationFacetsExample.java index 87a8400b3b75..059d5505ace1 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/ExpressionAggregationFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/ExpressionAggregationFacetsExample.java @@ -30,6 +30,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.taxonomy.AssociationAggregationFunction; import org.apache.lucene.facet.taxonomy.TaxonomyFacetFloatAssociations; @@ -97,12 +98,13 @@ private FacetResult search() throws IOException, ParseException { DoubleValuesSource.fromLongField("popularity")); // the value of the 'popularity' field // Aggregates the facet values - FacetsCollector fc = new FacetsCollector(true); + FacetsCollectorManager fcm = new FacetsCollectorManager(true); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 10, fcm).facetsCollector(); // Retrieve results Facets facets = diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/MultiCategoryListsFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/MultiCategoryListsFacetsExample.java index 964bd58ad00a..fd21cd809ae5 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/MultiCategoryListsFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/MultiCategoryListsFacetsExample.java @@ -25,6 +25,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.taxonomy.FastTaxonomyFacetCounts; import org.apache.lucene.facet.taxonomy.TaxonomyReader; @@ -97,12 +98,13 @@ private List search() throws IOException { IndexSearcher searcher = new IndexSearcher(indexReader); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); - FacetsCollector fc = new FacetsCollector(); + FacetsCollectorManager fcm = new FacetsCollectorManager(); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 10, fcm).facetsCollector(); // Retrieve results List results = new ArrayList<>(); diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java index 1fcc5335c100..ae6da84a11c9 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/RangeFacetsExample.java @@ -27,6 +27,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.range.LongRange; import org.apache.lucene.facet.range.LongRangeFacetCounts; @@ -86,13 +87,13 @@ private FacetsConfig getConfig() { /** User runs a query and counts facets. */ public FacetResult search() throws IOException { - // Aggregates the facet counts - FacetsCollector fc = new FacetsCollector(); - // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + searcher, new MatchAllDocsQuery(), 10, new FacetsCollectorManager()) + .facetsCollector(); Facets facets = new LongRangeFacetCounts("timestamp", fc, PAST_HOUR, PAST_SIX_HOURS, PAST_DAY); return facets.getTopChildren(10, "timestamp"); diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleFacetsExample.java index 980bc64613d3..5585e431e06b 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleFacetsExample.java @@ -99,12 +99,13 @@ List facetsWithSearch() throws IOException { IndexSearcher searcher = new IndexSearcher(indexReader); TaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); - FacetsCollector fc = new FacetsCollector(); + FacetsCollectorManager fcm = new FacetsCollectorManager(); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 10, fcm).facetsCollector(); // Retrieve results List results = new ArrayList<>(); @@ -156,8 +157,8 @@ FacetResult drillDown() throws IOException { // Now user drills down on Publish Date/2010: q.add("Publish Date", "2010"); - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, q, 10, fc); + FacetsCollectorManager fcm = new FacetsCollectorManager(); + FacetsCollector fc = FacetsCollectorManager.search(searcher, q, 10, fcm).facetsCollector(); // Retrieve results Facets facets = new FastTaxonomyFacetCounts(taxoReader, config, fc); diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleSortedSetFacetsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleSortedSetFacetsExample.java index 2c7c20d35f3f..cdb64a822bb3 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleSortedSetFacetsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/SimpleSortedSetFacetsExample.java @@ -25,6 +25,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.sortedset.DefaultSortedSetDocValuesReaderState; import org.apache.lucene.facet.sortedset.SortedSetDocValuesFacetCounts; @@ -92,12 +93,13 @@ private List search() throws IOException { new DefaultSortedSetDocValuesReaderState(indexReader, config); // Aggregates the facet counts - FacetsCollector fc = new FacetsCollector(); + FacetsCollectorManager fcm = new FacetsCollectorManager(); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 10, fcm).facetsCollector(); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); @@ -120,8 +122,8 @@ private FacetResult drillDown() throws IOException { // Now user drills down on Publish Year/2010: DrillDownQuery q = new DrillDownQuery(config); q.add("Publish Year", "2010"); - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, q, 10, fc); + FacetsCollectorManager fcm = new FacetsCollectorManager(); + FacetsCollector fc = FacetsCollectorManager.search(searcher, q, 10, fcm).facetsCollector(); // Retrieve results Facets facets = new SortedSetDocValuesFacetCounts(state, fc); diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/StringValueFacetCountsExample.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/StringValueFacetCountsExample.java index 9f2feb705e7e..cd848d24afb7 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/StringValueFacetCountsExample.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/StringValueFacetCountsExample.java @@ -27,6 +27,7 @@ import org.apache.lucene.facet.FacetResult; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.StringDocValuesReaderState; import org.apache.lucene.facet.StringValueFacetCounts; @@ -96,12 +97,13 @@ private List search() throws IOException { new StringDocValuesReaderState(indexReader, "Publish Year"); // Aggregates the facet counts - FacetsCollector fc = new FacetsCollector(); + FacetsCollectorManager fcm = new FacetsCollectorManager(); // MatchAllDocsQuery is for "browsing" (counts facets // for all non-deleted docs in the index); normally // you'd use a "normal" query: - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(searcher, new MatchAllDocsQuery(), 10, fcm).facetsCollector(); // Retrieve results Facets authorFacets = new StringValueFacetCounts(authorState, fc); diff --git a/lucene/demo/src/java/org/apache/lucene/demo/facet/package-info.java b/lucene/demo/src/java/org/apache/lucene/demo/facet/package-info.java index e83398650b17..0e0713e18d20 100644 --- a/lucene/demo/src/java/org/apache/lucene/demo/facet/package-info.java +++ b/lucene/demo/src/java/org/apache/lucene/demo/facet/package-info.java @@ -198,9 +198,9 @@ * org.apache.lucene.search.Collector}, and as such can be passed to the search() method of Lucene's * {@link org.apache.lucene.search.IndexSearcher}. In case the application also needs to collect * documents (in addition to accumulating/collecting facets), you can use one of {@link - * org.apache.lucene.facet.FacetsCollector#search(org.apache.lucene.search.IndexSearcher, - * org.apache.lucene.search.Query, int, org.apache.lucene.search.Collector) - * FacetsCollector.search(...)} utility methods. + * org.apache.lucene.facet.FacetsCollectorManager#search(org.apache.lucene.search.IndexSearcher, + * org.apache.lucene.search.Query, int, org.apache.lucene.facet.FacetsCollectorManager) + * FacetsCollectorManager.search(...)} utility methods. * *

There is a facets collecting code example in {@link * org.apache.lucene.demo.facet.SimpleFacetsExample#facetsWithSearch()}, see { + private final boolean keepScores; + /** Sole constructor. */ - public FacetsCollectorManager() {} + public FacetsCollectorManager() { + this(false); + } + + /** + * Creates a new collector manager that in turn creates {@link FacetsCollector} using the provided + * {@code keepScores} flag. hits. + */ + public FacetsCollectorManager(boolean keepScores) { + this.keepScores = keepScores; + } @Override public FacetsCollector newCollector() throws IOException { - return new FacetsCollector(); + return new FacetsCollector(keepScores); } @Override @@ -54,4 +79,167 @@ public ReducedFacetsCollector(final Collection facetsCollectors facetsCollector -> matchingDocs.addAll(facetsCollector.getMatchingDocs())); } } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult search( + IndexSearcher searcher, Query q, int n, FacetsCollectorManager fcm) throws IOException { + return doSearch(searcher, null, q, n, null, false, fcm); + } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult search( + IndexSearcher searcher, Query q, int n, Sort sort, FacetsCollectorManager fcm) + throws IOException { + if (sort == null) { + throw new IllegalArgumentException("sort must not be null"); + } + return doSearch(searcher, null, q, n, sort, false, fcm); + } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult search( + IndexSearcher searcher, + Query q, + int n, + Sort sort, + boolean doDocScores, + FacetsCollectorManager fcm) + throws IOException { + if (sort == null) { + throw new IllegalArgumentException("sort must not be null"); + } + return doSearch(searcher, null, q, n, sort, doDocScores, fcm); + } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult searchAfter( + IndexSearcher searcher, ScoreDoc after, Query q, int n, FacetsCollectorManager fcm) + throws IOException { + return doSearch(searcher, after, q, n, null, false, fcm); + } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult searchAfter( + IndexSearcher searcher, ScoreDoc after, Query q, int n, Sort sort, FacetsCollectorManager fcm) + throws IOException { + if (sort == null) { + throw new IllegalArgumentException("sort must not be null"); + } + return doSearch(searcher, after, q, n, sort, false, fcm); + } + + /** Utility method, to search and also collect all hits into the provided {@link Collector}. */ + public static FacetsResult searchAfter( + IndexSearcher searcher, + ScoreDoc after, + Query q, + int n, + Sort sort, + boolean doDocScores, + FacetsCollectorManager fcm) + throws IOException { + if (sort == null) { + throw new IllegalArgumentException("sort must not be null"); + } + return doSearch(searcher, after, q, n, sort, doDocScores, fcm); + } + + private static FacetsResult doSearch( + IndexSearcher searcher, + ScoreDoc after, + Query q, + int n, + Sort sort, + boolean doDocScores, + FacetsCollectorManager fcm) + throws IOException { + + int limit = searcher.getIndexReader().maxDoc(); + if (limit == 0) { + limit = 1; + } + n = Math.min(n, limit); + + if (after != null && after.doc >= limit) { + throw new IllegalArgumentException( + "after.doc exceeds the number of documents in the reader: after.doc=" + + after.doc + + " limit=" + + limit); + } + + final TopDocs topDocs; + final FacetsCollector facetsCollector; + if (n == 0) { + TotalHitCountCollectorManager hitCountCollectorManager = new TotalHitCountCollectorManager(); + MultiCollectorManager multiCollectorManager = + new MultiCollectorManager(hitCountCollectorManager, fcm); + Object[] result = searcher.search(q, multiCollectorManager); + topDocs = + new TopDocs( + new TotalHits((Integer) result[0], TotalHits.Relation.EQUAL_TO), new ScoreDoc[0]); + facetsCollector = (FacetsCollector) result[1]; + } else { + final MultiCollectorManager multiCollectorManager; + if (sort != null) { + if (after != null && !(after instanceof FieldDoc)) { + // TODO: if we fix type safety of TopFieldDocs we can + // remove this + throw new IllegalArgumentException("after must be a FieldDoc; got " + after); + } + TopFieldCollectorManager topFieldCollectorManager = + new TopFieldCollectorManager(sort, n, (FieldDoc) after, Integer.MAX_VALUE, true); + multiCollectorManager = new MultiCollectorManager(topFieldCollectorManager, fcm); + } else { + TopScoreDocCollectorManager topScoreDocCollectorManager = + new TopScoreDocCollectorManager(n, after, Integer.MAX_VALUE, true); + multiCollectorManager = new MultiCollectorManager(topScoreDocCollectorManager, fcm); + } + Object[] result = searcher.search(q, multiCollectorManager); + topDocs = (TopDocs) result[0]; + if (doDocScores) { + TopFieldCollector.populateScores(topDocs.scoreDocs, searcher, q); + } + facetsCollector = (FacetsCollector) result[1]; + } + return new FacetsResult(topDocs, facetsCollector); + } + + /** + * Holds results of a search run via static utility methods exposed by this class. Those include + * {@link TopDocs} as well as facets result included in the returned {@link FacetsCollector} + */ + public static class FacetsResult { + private final TopDocs topDocs; + private final FacetsCollector facetsCollector; + + /** + * Create a new instance of this class. + * + * @param topDocs the top docs + * @param facetsCollector the facets result included in a {@link FacetsCollector} instance + */ + public FacetsResult(TopDocs topDocs, FacetsCollector facetsCollector) { + this.topDocs = topDocs; + this.facetsCollector = facetsCollector; + } + + /** + * Exposed the {@link TopDocs} + * + * @return the top docs returned from the search + */ + public TopDocs topDocs() { + return topDocs; + } + + /** + * Exposes the facet results + * + * @return the facet results via a reduced {@link FacetsCollector} + */ + public FacetsCollector facetsCollector() { + return facetsCollector; + } + } } diff --git a/lucene/facet/src/java/org/apache/lucene/facet/package-info.java b/lucene/facet/src/java/org/apache/lucene/facet/package-info.java index dd0029dab74a..1f9ef95f097e 100644 --- a/lucene/facet/src/java/org/apache/lucene/facet/package-info.java +++ b/lucene/facet/src/java/org/apache/lucene/facet/package-info.java @@ -47,8 +47,8 @@ * all methods implement a common {@link org.apache.lucene.facet.Facets} base API that you use to * obtain specific facet counts. * - *

The various {@link org.apache.lucene.facet.FacetsCollector#search} utility methods are useful - * for doing an "ordinary" search (sorting by score, or by a specified Sort) but also collecting - * into a {@link org.apache.lucene.facet.FacetsCollector} for subsequent faceting. + *

The various {@link org.apache.lucene.facet.FacetsCollectorManager#search} utility methods are + * useful for doing an "ordinary" search (sorting by score, or by a specified Sort) but also + * collecting into a {@link org.apache.lucene.facet.FacetsCollectorManager} for subsequent faceting. */ package org.apache.lucene.facet; diff --git a/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java b/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java index d606009d79f0..066b8c7bcb76 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java @@ -189,8 +189,10 @@ public void testZeroLimit() throws IOException { DrillDownQuery q = new DrillDownQuery(config); q.add("b", "1"); int limit = 0; - FacetsCollector facetCollector = new FacetsCollector(); - FacetsCollector.search(searcher, q, limit, facetCollector); + + FacetsCollector facetCollector = + FacetsCollectorManager.search(searcher, q, limit, new FacetsCollectorManager()) + .facetsCollector(); Facets facets = getTaxonomyFacetCounts( taxo, config, facetCollector, config.getDimConfig("b").indexFieldName); diff --git a/lucene/facet/src/test/org/apache/lucene/facet/TestMultipleIndexFields.java b/lucene/facet/src/test/org/apache/lucene/facet/TestMultipleIndexFields.java index 706c09a98370..9ba77a871538 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/TestMultipleIndexFields.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/TestMultipleIndexFields.java @@ -331,9 +331,9 @@ private void assertCorrectResults(Facets facets) throws IOException { } private FacetsCollector performSearch(IndexSearcher searcher) throws IOException { - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, fc); - return fc; + return FacetsCollectorManager.search( + searcher, new MatchAllDocsQuery(), 10, new FacetsCollectorManager()) + .facetsCollector(); } private void seedIndex(TaxonomyWriter tw, RandomIndexWriter iw, FacetsConfig config) diff --git a/lucene/facet/src/test/org/apache/lucene/facet/sortedset/TestSortedSetDocValuesFacets.java b/lucene/facet/src/test/org/apache/lucene/facet/sortedset/TestSortedSetDocValuesFacets.java index f64b5518f8fb..c36a47f133f1 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/sortedset/TestSortedSetDocValuesFacets.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/sortedset/TestSortedSetDocValuesFacets.java @@ -1398,9 +1398,13 @@ public void testRandom() throws Exception { if (VERBOSE) { System.out.println("\nTEST: iter content=" + searchToken); } - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search( - searcher, new TermQuery(new Term("content", searchToken)), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + searcher, + new TermQuery(new Term("content", searchToken)), + 10, + new FacetsCollectorManager()) + .facetsCollector(); Facets facets; if (exec != null) { facets = new ConcurrentSortedSetDocValuesFacetCounts(state, fc, exec); @@ -1546,9 +1550,13 @@ public void testRandomHierarchicalFlatMix() throws Exception { if (VERBOSE) { System.out.println("\nTEST: iter content=" + searchToken); } - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search( - searcher, new TermQuery(new Term("content", searchToken)), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + searcher, + new TermQuery(new Term("content", searchToken)), + 10, + new FacetsCollectorManager()) + .facetsCollector(); Facets facets; if (exec != null) { facets = new ConcurrentSortedSetDocValuesFacetCounts(state, fc, exec); diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestOrdinalMappingLeafReader.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestOrdinalMappingLeafReader.java index 27badb7b0e3f..3f04363015dd 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestOrdinalMappingLeafReader.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestOrdinalMappingLeafReader.java @@ -24,6 +24,7 @@ import org.apache.lucene.facet.FacetTestCase; import org.apache.lucene.facet.Facets; import org.apache.lucene.facet.FacetsCollector; +import org.apache.lucene.facet.FacetsCollectorManager; import org.apache.lucene.facet.FacetsConfig; import org.apache.lucene.facet.LabelAndValue; import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyReader; @@ -89,8 +90,10 @@ private void verifyResults(Directory indexDir, Directory taxoDir) throws IOExcep DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoDir); IndexSearcher searcher = newSearcher(indexReader); - FacetsCollector collector = new FacetsCollector(); - FacetsCollector.search(searcher, new MatchAllDocsQuery(), 10, collector); + FacetsCollector collector = + FacetsCollectorManager.search( + searcher, new MatchAllDocsQuery(), 10, new FacetsCollectorManager()) + .facetsCollector(); // tag facets Facets tagFacets = new FastTaxonomyFacetCounts("$tags", taxoReader, facetConfig, collector); diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts.java index f9b7d9204a06..0e4e2c17631a 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetCounts.java @@ -1068,8 +1068,13 @@ public void testRandom() throws Exception { if (VERBOSE) { System.out.println("\nTEST: iter content=" + searchToken); } - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, new TermQuery(new Term("content", searchToken)), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + searcher, + new TermQuery(new Term("content", searchToken)), + 10, + new FacetsCollectorManager()) + .facetsCollector(); Facets facets = getTaxonomyFacetCounts(tr, config, fc); // Slow, yet hopefully bug-free, faceting: diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetValueSource.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetValueSource.java index aae2f2378693..9b08e3dcf916 100644 --- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetValueSource.java +++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/TestTaxonomyFacetValueSource.java @@ -325,10 +325,12 @@ public void testScoreAggregator() throws Exception { DirectoryReader r = DirectoryReader.open(iw); DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); - FacetsCollector fc = new FacetsCollector(true); BoostQuery csq = new BoostQuery(new ConstantScoreQuery(new MatchAllDocsQuery()), 2f); - TopDocs td = FacetsCollector.search(newSearcher(r), csq, 10, fc); + FacetsCollectorManager.FacetsResult facetsResult = + FacetsCollectorManager.search(newSearcher(r), csq, 10, new FacetsCollectorManager(true)); + TopDocs td = facetsResult.topDocs(); + FacetsCollector fc = facetsResult.facetsCollector(); // Test SUM: Facets facets = @@ -435,11 +437,12 @@ public void testWithScore() throws Exception { DirectoryReader r = DirectoryReader.open(iw); DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); - FacetsCollector fc = new FacetsCollector(true); // score documents by their 'price' field - makes asserting the correct counts for the // categories easier Query q = new FunctionQuery(new LongFieldSource("price")); - FacetsCollector.search(newSearcher(r), q, 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search(newSearcher(r), q, 10, new FacetsCollectorManager(true)) + .facetsCollector(); // Test SUM: Facets facets = @@ -588,8 +591,10 @@ public void testCountAndSumScore() throws Exception { DirectoryReader r = DirectoryReader.open(iw); DirectoryTaxonomyReader taxoReader = new DirectoryTaxonomyReader(taxoWriter); - FacetsCollector fc = new FacetsCollector(true); - FacetsCollector.search(newSearcher(r), new MatchAllDocsQuery(), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + newSearcher(r), new MatchAllDocsQuery(), 10, new FacetsCollectorManager(true)) + .facetsCollector(); Facets facets1 = getTaxonomyFacetCounts(taxoReader, config, fc); Facets facets2; @@ -657,8 +662,13 @@ public void testRandom() throws Exception { if (VERBOSE) { System.out.println("\nTEST: iter content=" + searchToken); } - FacetsCollector fc = new FacetsCollector(); - FacetsCollector.search(searcher, new TermQuery(new Term("content", searchToken)), 10, fc); + FacetsCollector fc = + FacetsCollectorManager.search( + searcher, + new TermQuery(new Term("content", searchToken)), + 10, + new FacetsCollectorManager()) + .facetsCollector(); checkResults( numDims,