You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/10/18 13:24:22 UTC
lucene-solr:branch_6x: LUCENE-7493: FacetCollector.search now accepts
limit=0, for getting facets but not search hits
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x e6d225603 -> 2b32f5d0d
LUCENE-7493: FacetCollector.search now accepts limit=0, for getting facets but not search hits
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/2b32f5d0
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2b32f5d0
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2b32f5d0
Branch: refs/heads/branch_6x
Commit: 2b32f5d0db532eeee723f707f0d704d7e6f6ac33
Parents: e6d2256
Author: Mike McCandless <mi...@apache.org>
Authored: Tue Oct 18 09:23:24 2016 -0400
Committer: Mike McCandless <mi...@apache.org>
Committed: Tue Oct 18 09:23:51 2016 -0400
----------------------------------------------------------------------
lucene/CHANGES.txt | 3 ++
.../apache/lucene/facet/FacetsCollector.java | 42 ++++++++++++--------
.../apache/lucene/facet/TestDrillDownQuery.java | 11 +++++
3 files changed, 40 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2b32f5d0/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 33adbb7..d09afab 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -46,6 +46,9 @@ Bug Fixes
* LUCENE-6914: Fixed DecimalDigitFilter in case of supplementary code points.
(Hossman)
+* LUCENE-7493: FacetCollector.search threw an unexpected exception if
+ you asked for zero hits but wanted facets (Mahesh via Mike McCandless)
+
Improvements
* LUCENE-7439: FuzzyQuery now matches all terms within the specified
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2b32f5d0/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
----------------------------------------------------------------------
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 d3f2eb8..b942f7e 100644
--- a/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
+++ b/lucene/facet/src/java/org/apache/lucene/facet/FacetsCollector.java
@@ -36,6 +36,7 @@ import org.apache.lucene.search.TopDocsCollector;
import org.apache.lucene.search.TopFieldCollector;
import org.apache.lucene.search.TopFieldDocs;
import org.apache.lucene.search.TopScoreDocCollector;
+import org.apache.lucene.search.TotalHitCountCollector;
import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.BitDocIdSet;
import org.apache.lucene.util.FixedBitSet;
@@ -251,23 +252,32 @@ public class FacetsCollector extends SimpleCollector implements Collector {
+ after.doc + " limit=" + limit);
}
- TopDocsCollector<?> hitsCollector;
- 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);
- }
- boolean fillFields = true;
- hitsCollector = TopFieldCollector.create(sort, n,
- (FieldDoc) after,
- fillFields,
- doDocScores,
- doMaxScore);
+ TopDocs topDocs = null;
+ if (n==0) {
+ TotalHitCountCollector totalHitCountCollector = new TotalHitCountCollector();
+ searcher.search(q, MultiCollector.wrap(totalHitCountCollector, fc));
+ topDocs = new TopDocs(totalHitCountCollector.getTotalHits(), new ScoreDoc[0], Float.NaN);
} else {
- hitsCollector = TopScoreDocCollector.create(n, after);
+ TopDocsCollector<?> hitsCollector;
+ 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);
+ }
+ boolean fillFields = true;
+ hitsCollector = TopFieldCollector.create(sort, n,
+ (FieldDoc) after,
+ fillFields,
+ doDocScores,
+ doMaxScore);
+ } else {
+ hitsCollector = TopScoreDocCollector.create(n, after);
+ }
+ searcher.search(q, MultiCollector.wrap(hitsCollector, fc));
+
+ topDocs = hitsCollector.topDocs();
}
- searcher.search(q, MultiCollector.wrap(hitsCollector, fc));
- return hitsCollector.topDocs();
+ return topDocs;
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/2b32f5d0/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java
----------------------------------------------------------------------
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 f76e839..bf8d0f4 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/TestDrillDownQuery.java
@@ -182,6 +182,17 @@ public class TestDrillDownQuery extends FacetTestCase {
assertEquals(10, docs.totalHits);
}
+ public void testZeroLimit() throws IOException {
+ IndexSearcher searcher = newSearcher(reader);
+ DrillDownQuery q = new DrillDownQuery(config);
+ q.add("b", "1");
+ int limit = 0;
+ FacetsCollector facetCollector = new FacetsCollector();
+ FacetsCollector.search(searcher, q, limit, facetCollector);
+ Facets facets = getTaxonomyFacetCounts(taxo, config, facetCollector, config.getDimConfig("b").indexFieldName);
+ assertNotNull(facets.getTopChildren(10, "b"));
+ }
+
public void testScoring() throws IOException {
// verify that drill-down queries do not modify scores
IndexSearcher searcher = newSearcher(reader);