You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ry...@apache.org on 2012/03/08 20:25:31 UTC

svn commit: r1298527 - in /lucene/dev/trunk/solr: core/src/java/org/apache/solr/handler/component/ solrj/src/java/org/apache/solr/client/solrj/response/ solrj/src/test/org/apache/solr/client/solrj/

Author: ryan
Date: Thu Mar  8 19:25:30 2012
New Revision: 1298527

URL: http://svn.apache.org/viewvc?rev=1298527&view=rev
Log:
SOLR-3209: FieldStatsInfo returns Object rather then Double

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/response/FieldStatsInfo.java
    lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java?rev=1298527&r1=1298526&r2=1298527&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java Thu Mar  8 19:25:30 2012
@@ -304,9 +304,8 @@ class NumericStatsValues extends Abstrac
  */
 class DateStatsValues extends AbstractStatsValues<Date> {
 
-  private static final DateField DATE_FIELD = new DateField();
-
-  private long sum;
+  private long sum = -1;
+  double sumOfSquares = 0;
 
   public DateStatsValues(SchemaField sf) {
     super(sf);
@@ -317,22 +316,27 @@ class DateStatsValues extends AbstractSt
    */
   protected void updateTypeSpecificStats(NamedList stv) {
     sum += ((Date) stv.get("sum")).getTime();
+    sumOfSquares += ((Number)stv.get("sumOfSquares")).doubleValue();
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void updateTypeSpecificStats(Date value) {
-    sum += value.getTime();
+  public void updateTypeSpecificStats(Date v) {
+    long value = v.getTime();
+    sumOfSquares += (value * value); // for std deviation
+    sum += value;
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void updateTypeSpecificStats(Date value, int count) {
-    sum += value.getTime() * count;
+  public void updateTypeSpecificStats(Date v, int count) {
+    long value = v.getTime();
+    sumOfSquares += (value * value * count); // for std deviation
+    sum += value * count;
   }
 
    /**
@@ -353,10 +357,29 @@ class DateStatsValues extends AbstractSt
    * @param res NamedList to add the type specific statistics too
    */
   protected void addTypeSpecificStats(NamedList<Object> res) {
+    if(sum<=0) {
+      return; // date==0 is meaningless
+    }
     res.add("sum", new Date(sum));
     if (count > 0) {
       res.add("mean", new Date(sum / count));
     }
+    res.add("sumOfSquares", sumOfSquares);
+    res.add("stddev", getStandardDeviation());
+  }
+  
+
+  
+  /**
+   * Calculates the standard deviation.  For dates, this is really the MS deviation
+   *
+   * @return Standard deviation statistic
+   */
+  private double getStandardDeviation() {
+    if (count <= 1) {
+      return 0.0D;
+    }
+    return Math.sqrt(((count * sumOfSquares) - (sum * sum)) / (count * (count - 1.0D)));
   }
 }
 

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/response/FieldStatsInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/response/FieldStatsInfo.java?rev=1298527&r1=1298526&r2=1298527&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/response/FieldStatsInfo.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/response/FieldStatsInfo.java Thu Mar  8 19:25:30 2012
@@ -33,12 +33,12 @@ import java.util.Map;
 public class FieldStatsInfo implements Serializable {
   final String name;
   
-  Double min;
-  Double max;
-  Double sum;
+  Object min;
+  Object max;
+  Object sum;
   Long count;
   Long missing;
-  Double mean = null;
+  Object mean = null;
   Double sumOfSquares = null;
   Double stddev = null;
   
@@ -50,13 +50,13 @@ public class FieldStatsInfo implements S
     
     for( Map.Entry<String, Object> entry : nl ) {
       if( "min".equals( entry.getKey() ) ) {
-        min = (Double)entry.getValue();
+        min = entry.getValue();
       }
       else if( "max".equals( entry.getKey() ) ) {
-        max = (Double)entry.getValue();
+        max = entry.getValue();
       }
       else if( "sum".equals( entry.getKey() ) ) {
-        sum = (Double)entry.getValue();
+        sum = entry.getValue();
       }
       else if( "count".equals( entry.getKey() ) ) {
         count = (Long)entry.getValue();
@@ -65,7 +65,7 @@ public class FieldStatsInfo implements S
         missing = (Long)entry.getValue();
       }
       else if( "mean".equals( entry.getKey() ) ) {
-        mean = (Double)entry.getValue();
+        mean = entry.getValue();
       }
       else if( "sumOfSquares".equals( entry.getKey() ) ) {
         sumOfSquares = (Double)entry.getValue();
@@ -129,15 +129,15 @@ public class FieldStatsInfo implements S
     return name;
   }
 
-  public Double getMin() {
+  public Object getMin() {
     return min;
   }
 
-  public Double getMax() {
+  public Object getMax() {
     return max;
   }
 
-  public Double getSum() {
+  public Object getSum() {
     return sum;
   }
 
@@ -149,7 +149,7 @@ public class FieldStatsInfo implements S
     return missing;
   }
 
-  public Double getMean() {
+  public Object getMean() {
     return mean;
   }
 

Modified: lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1298527&r1=1298526&r2=1298527&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Thu Mar  8 19:25:30 2012
@@ -711,8 +711,8 @@ abstract public class SolrExampleTests e
     FieldStatsInfo stats = rsp.getFieldStatsInfo().get( f );
     assertNotNull( stats );
     
-    assertEquals( 23.0, stats.getMin().doubleValue(), 0 );
-    assertEquals( 94.0, stats.getMax().doubleValue(), 0 );
+    assertEquals( 23.0, ((Double)stats.getMin()).doubleValue(), 0 );
+    assertEquals( 94.0, ((Double)stats.getMax()).doubleValue(), 0 );
     assertEquals( new Long(nums.length), stats.getCount() );
     assertEquals( new Long(0), stats.getMissing() );
     assertEquals( "26.4", stats.getStddev().toString().substring(0,4) );
@@ -737,8 +737,8 @@ abstract public class SolrExampleTests e
     stats = rsp.getFieldStatsInfo().get( f );
     assertNotNull( stats );
     
-    assertEquals( 5.0, stats.getMin().doubleValue(), 0 );
-    assertEquals( 20.0, stats.getMax().doubleValue(), 0 );
+    assertEquals( 5.0, ((Double)stats.getMin()).doubleValue(), 0 );
+    assertEquals( 20.0, ((Double)stats.getMin()).doubleValue(), 0 );
     assertEquals( new Long(nums.length), stats.getCount() );
     assertEquals( new Long(0), stats.getMissing() );
     
@@ -782,7 +782,7 @@ abstract public class SolrExampleTests e
     assertEquals( inStockF.getCount(), inStockT.getCount() );
     assertEquals( stats.getCount().longValue(), inStockF.getCount()+inStockT.getCount() );
 
-    assertTrue( "check that min max faceted ok", inStockF.getMin() > inStockT.getMax() );
+    assertTrue( "check that min max faceted ok", ((Double)inStockF.getMin()).doubleValue() > ((Double)inStockF.getMax()).doubleValue() );
     assertEquals( "they have the same distribution", inStockF.getStddev(), inStockT.getStddev() );
   }