You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by ho...@apache.org on 2009/12/07 22:04:13 UTC

svn commit: r888136 - in /lucene/solr/trunk: CHANGES.txt src/java/org/apache/solr/request/SimpleFacets.java src/test/org/apache/solr/request/SimpleFacetsTest.java

Author: hossman
Date: Mon Dec  7 21:04:09 2009
New Revision: 888136

URL: http://svn.apache.org/viewvc?rev=888136&view=rev
Log:
SOLR-343: Date faceting now respects facet.mincount limiting

Modified:
    lucene/solr/trunk/CHANGES.txt
    lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java
    lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java

Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=888136&r1=888135&r2=888136&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Mon Dec  7 21:04:09 2009
@@ -110,6 +110,9 @@
 * SOLR-1628: log contains incorrect number of adds and deletes. 
   (Thijs Vonk via yonik)
 
+* SOLR-343: Date faceting now respects facet.mincount limiting
+  (Uri Boness, Raiko Eckstein via hossman)
+
 * SOLR-1624: Highlighter only highlights values from the first field  value
   in a multivalued field when term positions (term vectors) are stored.
   (Chris Harris via yonik)

Modified: lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java?rev=888136&r1=888135&r2=888136&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/request/SimpleFacets.java Mon Dec  7 21:04:09 2009
@@ -596,7 +596,9 @@
       final String gap = required.getFieldParam(f,FacetParams.FACET_DATE_GAP);
       final DateMathParser dmp = new DateMathParser(ft.UTC, Locale.US);
       dmp.setNow(NOW);
-      
+
+      int minCount = params.getFieldInt(f,FacetParams.FACET_MINCOUNT, 0);
+
       try {
         
         Date low = start;
@@ -617,7 +619,10 @@
               (SolrException.ErrorCode.BAD_REQUEST,
                "date facet infinite loop (is gap negative?)");
           }
-          resInner.add(label, rangeCount(sf,low,high,true,true));
+          int count = rangeCount(sf,low,high,true,true);
+          if (count >= minCount) {
+            resInner.add(label, count);
+          }
           low = high;
         }
       } catch (java.text.ParseException e) {

Modified: lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java?rev=888136&r1=888135&r2=888136&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/request/SimpleFacetsTest.java Mon Dec  7 21:04:09 2009
@@ -284,6 +284,58 @@
             
             );
 
+    assertQ("check counts for month of facet by day with global mincount = 1",
+            req( "q", "*:*"
+                ,"rows", "0"
+                ,"facet", "true"
+                ,"facet.date", f
+                ,"facet.date.start", "1976-07-01T00:00:00.000Z"
+                ,"facet.date.end",   "1976-07-01T00:00:00.000Z+1MONTH"
+                ,"facet.date.gap",   "+1DAY"
+                ,"facet.date.other", "all"
+                ,"facet.mincount", "1"
+                )
+            // 31 days + pre+post+inner = 34
+            ,"*[count("+pre+"/int)=11]"
+            ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
+            // july4th = 2 because exists doc @ 00:00:00.000 on July5
+            // (date faceting is inclusive)
+            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-12T00:00:00Z'][.='1'  ]"
+            ,pre+"/int[@name='1976-07-13T00:00:00Z'][.='1'  ]"
+            ,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-21T00:00:00Z'][.='1'  ]"
+            ,pre+"/int[@name='1976-07-30T00:00:00Z'][.='1'  ]"
+            ,pre+"/int[@name='before' ][.='2']"
+            ,pre+"/int[@name='after'  ][.='1']"
+            ,pre+"/int[@name='between'][.='11']"
+            );
+
+    assertQ("check counts for month of facet by day with field mincount = 1",
+            req( "q", "*:*"
+                ,"rows", "0"
+                ,"facet", "true"
+                ,"facet.date", f
+                ,"facet.date.start", "1976-07-01T00:00:00.000Z"
+                ,"facet.date.end",   "1976-07-01T00:00:00.000Z+1MONTH"
+                ,"facet.date.gap",   "+1DAY"
+                ,"facet.date.other", "all"
+                ,"f." + f + ".facet.mincount", "2"
+                )
+            // 31 days + pre+post+inner = 34
+            ,"*[count("+pre+"/int)=7]"
+            ,pre+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
+            // july4th = 2 because exists doc @ 00:00:00.000 on July5
+            // (date faceting is inclusive)
+            ,pre+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='1976-07-15T00:00:00Z'][.='2'  ]"
+            ,pre+"/int[@name='before' ][.='2']"
+            ,pre+"/int[@name='after'  ][.='1']"
+            ,pre+"/int[@name='between'][.='11']"
+            );
+
     assertQ("check hardend=false",
             req( "q", "*:*"
                 ,"rows", "0"