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/09/05 20:07:16 UTC
lucene-solr:master: SOLR-11316: date support for min/max,
fix missing bug for int/long fields
Repository: lucene-solr
Updated Branches:
refs/heads/master cb0ff1a79 -> cc344dc6b
SOLR-11316: date support for min/max, fix missing bug for int/long fields
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/cc344dc6
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/cc344dc6
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/cc344dc6
Branch: refs/heads/master
Commit: cc344dc6bd9e71ed7848618630b51f4633e1dd50
Parents: cb0ff1a
Author: yonik <yo...@apache.org>
Authored: Tue Sep 5 16:06:41 2017 -0400
Committer: yonik <yo...@apache.org>
Committed: Tue Sep 5 16:06:41 2017 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 3 ++
.../org/apache/solr/search/facet/MinMaxAgg.java | 31 ++++++++++++++++++--
.../solr/search/facet/TestJsonFacets.java | 22 ++++++++++++--
3 files changed, 52 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cc344dc6/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index ad0a522..be89fb1 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -86,6 +86,9 @@ New Features
* SOLR-11317: JSON Facet API: min/max aggregations on numeric fields are now typed better so int/long
fields return an appropriate integral type rather than a double. (yonik)
+* SOLR-11316: JSON Facet API: min/max aggregations are now supported on single-valued date fields.
+ (yonik)
+
Bug Fixes
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cc344dc6/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java b/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
index 5a48ab2..008d0fd 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/MinMaxAgg.java
@@ -18,6 +18,7 @@ package org.apache.solr.search.facet;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Date;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.MultiDocValues;
@@ -70,8 +71,9 @@ public class MinMaxAgg extends SimpleAggValueSource {
return new DFuncAcc(vs, fcontext, numSlots);
case INTEGER:
case LONG:
- case DATE:
return new LFuncAcc(vs, fcontext, numSlots);
+ case DATE:
+ return new DateFuncAcc(vs, fcontext, numSlots);
}
}
@@ -185,7 +187,7 @@ public class MinMaxAgg extends SimpleAggValueSource {
@Override
public Object getValue(int slot) {
long val = result[slot];
- if (val == 0 && exists.get(slot)) {
+ if (val == 0 && !exists.get(slot)) {
return null;
} else {
return val;
@@ -221,6 +223,31 @@ public class MinMaxAgg extends SimpleAggValueSource {
}
+ class DateFuncAcc extends LongFuncSlotAcc {
+ private static final long MISSING = Long.MIN_VALUE;
+ public DateFuncAcc(ValueSource values, FacetContext fcontext, int numSlots) {
+ super(values, fcontext, numSlots, MISSING);
+ }
+
+ @Override
+ public void collect(int doc, int slotNum) throws IOException {
+ long val = values.longVal(doc);
+ if (val == 0 && !values.exists(doc)) return; // depend on fact that non existing values return 0 for func query
+
+ long currVal = result[slotNum];
+ if (Long.compare(val, currVal) * minmax < 0 || currVal == MISSING) {
+ result[slotNum] = val;
+ }
+ }
+
+ // let compare be the default for now (since we can't yet correctly handle sortMissingLast
+
+ @Override
+ public Object getValue(int slot) {
+ return result[slot] == MISSING ? null : new Date(result[slot]);
+ }
+ }
+
abstract class OrdAcc extends SlotAcc {
final static int MISSING = -1;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cc344dc6/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
index 559240b..33d7fa8 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestJsonFacets.java
@@ -695,11 +695,29 @@ public class TestJsonFacets extends SolrTestCaseHS {
"}"
)
, "facets=={count:6 " +
- ",f1:{ buckets:[{val:-1,count:2,a:-5},{val:3,count:2,a:-5},{val:-5,count:1,a:2},{val:2,count:1,a:2},{val:0,count:2,a:3}, ] } " +
- ",f2:{ buckets:[{val:0,count:2,a:7},{val:3,count:2,a:3},{val:-5,count:1,a:2},{val:2,count:1,a:2},{val:-1,count:2,a:-5}, ] } " +
+ ",f1:{ buckets:[{val:-1,count:2,a:-5},{val:3,count:2,a:-5},{val:-5,count:1,a:2},{val:2,count:1,a:2},{val:0,count:2,a:3} ] } " +
+ ",f2:{ buckets:[{val:0,count:2,a:7},{val:3,count:2,a:3},{val:-5,count:1,a:2},{val:2,count:1,a:2},{val:-1,count:2,a:-5} ] } " +
"}"
);
+
+ // Same thing for dates
+ // test min/max of string field
+ if (date.equals("date_dt") || date.equals("date_dtd")) { // supports only single valued currently...
+ client.testJQ(params(p, "q", "*:*"
+ , "json.facet", "{" +
+ " f3:{${terms} type:field, field:${num_is}, facet:{a:'min(${date})'}, sort:'a desc' }" +
+ ",f4:{${terms} type:field, field:${num_is}, facet:{a:'max(${date})'}, sort:'a asc' }" +
+ "}"
+ )
+ , "facets=={count:6 " +
+ ",f3:{ buckets:[{val:-1,count:2,a:'2002-02-02T02:02:02Z'},{val:3,count:2,a:'2002-02-02T02:02:02Z'},{val:0,count:2,a:'2001-02-03T01:02:03Z'},{val:-5,count:1,a:'2001-01-01T01:01:01Z'},{val:2,count:1,a:'2001-01-01T01:01:01Z'} ] } " +
+ ",f4:{ buckets:[{val:-5,count:1,a:'2001-01-01T01:01:01Z'},{val:2,count:1,a:'2001-01-01T01:01:01Z'},{val:-1,count:2,a:'2002-03-01T03:02:01Z'},{val:0,count:2,a:'2003-03-03T03:03:03Z'},{val:3,count:2,a:'2003-03-03T03:03:03Z'} ] } " +
+ "}"
+ );
+ }
+
+
// percentiles 0,10,50,90,100
// catA: 2.0 2.2 3.0 3.8 4.0
// catB: -9.0 -8.2 -5.0 7.800000000000001 11.0