You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2017/04/06 13:33:12 UTC
lucene-solr:branch_6x: SOLR-7452: add support for refining missing
allBuckets
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x e0d0d98a5 -> 7828ae07e
SOLR-7452: add support for refining missing allBuckets
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/7828ae07
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/7828ae07
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/7828ae07
Branch: refs/heads/branch_6x
Commit: 7828ae07ec1a4a451192fae08e29eddce1582292
Parents: e0d0d98
Author: yonik <yo...@apache.org>
Authored: Thu Apr 6 09:29:29 2017 -0400
Committer: yonik <yo...@apache.org>
Committed: Thu Apr 6 09:29:59 2017 -0400
----------------------------------------------------------------------
.../solr/search/facet/FacetFieldMerger.java | 2 ++
.../facet/FacetFieldProcessorByArray.java | 24 +++++++++++++++++++-
.../search/facet/TestJsonFacetRefinement.java | 17 ++++++++++++--
3 files changed, 40 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7828ae07/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
index f8f6463..9ec5d79 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
@@ -177,9 +177,11 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
if (freq.missing) {
refinement = getRefinementSpecial(mcontext, refinement, tagsWithPartial, missingBucket, "missing");
}
+ /** allBuckets does not execute sub-facets because we don't change the domain. We may need refinement info in the future though for stats.
if (freq.allBuckets) {
refinement = getRefinementSpecial(mcontext, refinement, tagsWithPartial, allBuckets, "allBuckets");
}
+ **/
}
return refinement;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7828ae07/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByArray.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByArray.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByArray.java
index 95b9f0b..c19d55d 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByArray.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessorByArray.java
@@ -24,6 +24,8 @@ import org.apache.lucene.util.BytesRefBuilder;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.schema.SchemaField;
+import static org.apache.solr.search.facet.FacetContext.SKIP_FACET;
+
/**
* Base class for DV/UIF accumulating counts into an array by ordinal. It's
* for {@link org.apache.lucene.index.SortedDocValues} and {@link org.apache.lucene.index.SortedSetDocValues} only.
@@ -57,8 +59,14 @@ abstract class FacetFieldProcessorByArray extends FacetFieldProcessor {
}
private SimpleOrderedMap<Object> calcFacets() throws IOException {
+ SimpleOrderedMap<Object> refineResult = null;
+ boolean skipThisFacet = (fcontext.flags & SKIP_FACET) != 0;
+
if (fcontext.facetInfo != null) {
- return refineFacets();
+ refineResult = refineFacets();
+ // if we've seen this facet bucket, then refining can be done. If we haven't, we still
+ // only need to continue if we need allBuckets or numBuckets info.
+ if (skipThisFacet || (!freq.allBuckets && !freq.numBuckets)) return refineResult;
}
String prefix = freq.prefix;
@@ -71,6 +79,20 @@ abstract class FacetFieldProcessorByArray extends FacetFieldProcessor {
findStartAndEndOrds();
+ if (refineResult != null) {
+ if (freq.allBuckets) {
+ createAccs(nDocs, 1);
+ allBucketsAcc = new SpecialSlotAcc(fcontext, null, -1, accs, 0);
+ collectDocs();
+
+ SimpleOrderedMap<Object> allBuckets = new SimpleOrderedMap<>();
+ allBuckets.add("count", allBucketsAcc.getSpecialCount());
+ allBucketsAcc.setValues(allBuckets, -1); // -1 slotNum is unused for SpecialSlotAcc
+ refineResult.add("allBuckets", allBuckets);
+ return refineResult;
+ }
+ }
+
maxSlots = nTerms;
if (freq.allBuckets) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/7828ae07/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
index bcb5f09..1561b3e 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacetRefinement.java
@@ -387,8 +387,21 @@ public class TestJsonFacetRefinement extends SolrTestCaseHS {
"}"
);
-
-
+ // test filling in missing "allBuckets"
+ // test filling in "missing" bucket for partially refined facets
+ client.testJQ(params(p, "q", "*:*",
+ "json.facet", "{" +
+ " cat :{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:false, allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:false} } }" +
+ ", cat2:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true } } }" +
+ ", cat3:{type:terms, field:${cat_s}, limit:1, overrequest:0, refine:true , allBuckets:true, facet:{ xy:{type:terms, field:${xy_s}, limit:1, overrequest:0, allBuckets:true, refine:true , facet:{f:'sum(${num_d})'} } } }" +
+ "}"
+ )
+ , "facets=={ count:8" +
+ ", cat:{ allBuckets:{count:8}, buckets:[ {val:A, count:3, xy:{buckets:[{count:2, val:X}], allBuckets:{count:3}}}] }" +
+ ",cat2:{ allBuckets:{count:8}, buckets:[ {val:A, count:4, xy:{buckets:[{count:3, val:X}], allBuckets:{count:4}}}] }" +
+ ",cat3:{ allBuckets:{count:8}, buckets:[ {val:A, count:4, xy:{buckets:[{count:3, val:X, f:23.0}], allBuckets:{count:4, f:4.0}}}] }" +
+ "}"
+ );
}