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 2013/04/16 19:16:02 UTC

svn commit: r1468513 - in /lucene/dev/trunk: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/request/SimpleFacets.java solr/core/src/test/org/apache/solr/request/TestFaceting.java

Author: ryan
Date: Tue Apr 16 17:16:01 2013
New Revision: 1468513

URL: http://svn.apache.org/r1468513
Log:
SOLR-1351, SOLR-4717 -- facet same field multiple ways
........
Merged revision(s) 1468511 from lucene/dev/branches/branch_4x:

Modified:
    lucene/dev/trunk/   (props changed)
    lucene/dev/trunk/solr/   (props changed)
    lucene/dev/trunk/solr/core/   (props changed)
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SimpleFacets.java?rev=1468513&r1=1468512&r2=1468513&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/request/SimpleFacets.java Tue Apr 16 17:16:01 2013
@@ -106,7 +106,6 @@ public class SimpleFacets {
   protected DocSet docsOrig;
   /** Configuration params behavior should be driven by */
   protected final SolrParams orig;
-  protected final SolrParams required;
   /** Searcher to use for all calculations */
   protected final SolrIndexSearcher searcher;
   protected final SolrQueryRequest req;
@@ -117,6 +116,7 @@ public class SimpleFacets {
   // per-facet values
   protected SolrParams localParams; // localParams on this particular facet command
   protected SolrParams params;      // local+original
+  protected SolrParams required;    // required version of params
   protected String facetValue;      // the field to or query to facet on (minus local params)
   protected DocSet docs;            // the base docset for this particular facet
   protected String key;             // what name should the results be stored under
@@ -152,6 +152,7 @@ public class SimpleFacets {
       return;
     }
     params = SolrParams.wrapDefaults(localParams, orig);
+    required = new RequiredSolrParams(params);
 
     // remove local params unless it's a query
     if (type != FacetParams.FACET_QUERY) { // TODO Cut over to an Enum here

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java?rev=1468513&r1=1468512&r2=1468513&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/request/TestFaceting.java Tue Apr 16 17:16:01 2013
@@ -321,4 +321,182 @@ public class TestFaceting extends SolrTe
         "//lst[@name='facet_fields']/lst[@name='f_td']/int[3][@name='-1.218']");
   }
 
-}
\ No newline at end of file
+
+
+  public void testDateFacetsWithMultipleConfigurationForSameField() {
+    clearIndex();
+    final String f = "bday_dt";
+
+    assertU(adoc("id", "1",  f, "1976-07-04T12:08:56.235Z"));
+    assertU(adoc("id", "2",  f, "1976-07-05T00:00:00.000Z"));
+    assertU(adoc("id", "3",  f, "1976-07-15T00:07:67.890Z"));
+    assertU(commit());
+    assertU(adoc("id", "4",  f, "1976-07-21T00:07:67.890Z"));
+    assertU(adoc("id", "5",  f, "1976-07-13T12:12:25.255Z"));
+    assertU(adoc("id", "6",  f, "1976-07-03T17:01:23.456Z"));
+    assertU(adoc("id", "7",  f, "1976-07-12T12:12:25.255Z"));
+    assertU(adoc("id", "8",  f, "1976-07-15T15:15:15.155Z"));
+    assertU(adoc("id", "9",  f, "1907-07-12T13:13:23.235Z"));
+    assertU(adoc("id", "10", f, "1976-07-03T11:02:45.678Z"));
+    assertU(commit());
+    assertU(adoc("id", "11", f, "1907-07-12T12:12:25.255Z"));
+    assertU(adoc("id", "12", f, "2007-07-30T07:07:07.070Z"));
+    assertU(adoc("id", "13", f, "1976-07-30T22:22:22.222Z"));
+    assertU(adoc("id", "14", f, "1976-07-05T22:22:22.222Z"));
+    assertU(commit());
+
+    final String preFoo = "//lst[@name='facet_dates']/lst[@name='foo']";
+    final String preBar = "//lst[@name='facet_dates']/lst[@name='bar']";
+
+    assertQ("check counts for month of facet by day",
+            req( "q", "*:*"
+                ,"rows", "0"
+                ,"facet", "true"
+                ,"facet.date", "{!key=foo " +
+                  "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
+                ,"facet.date", "{!key=bar " +
+                  "facet.date.start=1976-07-01T00:00:00.000Z " +
+                  "facet.date.end=1976-07-01T00:00:00.000Z+7DAY " +
+                  "facet.date.gap=+1DAY " +
+                "}" + f
+              )
+            // 31 days + pre+post+inner = 34
+            ,"*[count("+preFoo+"/int)=34]"
+            ,preFoo+"/int[@name='1976-07-01T00:00:00Z'][.='0'  ]"
+            ,preFoo+"/int[@name='1976-07-02T00:00:00Z'][.='0'  ]"
+            ,preFoo+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
+            // july4th = 2 because exists doc @ 00:00:00.000 on July5
+            // (date faceting is inclusive)
+            ,preFoo+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,preFoo+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
+            ,preFoo+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-08T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-09T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-10T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-11T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-12T00:00:00Z'][.='1'  ]"
+            ,preFoo+"/int[@name='1976-07-13T00:00:00Z'][.='1'  ]"
+            ,preFoo+"/int[@name='1976-07-14T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-15T00:00:00Z'][.='2'  ]"
+            ,preFoo+"/int[@name='1976-07-16T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-17T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-18T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-19T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-21T00:00:00Z'][.='1'  ]"
+            ,preFoo+"/int[@name='1976-07-22T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-23T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-24T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-25T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-26T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-27T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-28T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-29T00:00:00Z'][.='0']"
+            ,preFoo+"/int[@name='1976-07-30T00:00:00Z'][.='1'  ]"
+            ,preFoo+"/int[@name='1976-07-31T00:00:00Z'][.='0']"
+
+            ,preFoo+"/int[@name='before' ][.='2']"
+            ,preFoo+"/int[@name='after'  ][.='1']"
+            ,preFoo+"/int[@name='between'][.='11']"
+
+            ,"*[count("+preBar+"/int)=7]"
+            ,preBar+"/int[@name='1976-07-01T00:00:00Z'][.='0'  ]"
+            ,preBar+"/int[@name='1976-07-02T00:00:00Z'][.='0'  ]"
+            ,preBar+"/int[@name='1976-07-03T00:00:00Z'][.='2'  ]"
+            // july4th = 2 because exists doc @ 00:00:00.000 on July5
+            // (date faceting is inclusive)
+            ,preBar+"/int[@name='1976-07-04T00:00:00Z'][.='2'  ]"
+            ,preBar+"/int[@name='1976-07-05T00:00:00Z'][.='2'  ]"
+            ,preBar+"/int[@name='1976-07-06T00:00:00Z'][.='0']"
+            ,preBar+"/int[@name='1976-07-07T00:00:00Z'][.='0']"
+              );
+
+      clearIndex();
+      assertU(commit());
+    }
+
+    public void testSimpleFacetCountsWithMultipleConfigurationsForSameField() {
+      clearIndex();
+      String fname = "trait_ss";
+      assertU(adoc("id", "42",
+          fname, "Tool",
+          fname, "Obnoxious",
+          "name_s", "Zapp Brannigan"));
+
+      assertU(adoc("id", "43" ,
+                   "title_s", "Democratic Order of Planets"));
+      assertU(commit());
+  
+      assertU(adoc("id", "44",
+          fname, "Tool",
+          "name_s", "The Zapper"));
+  
+      assertU(adoc("id", "45",
+          fname, "Chauvinist",
+          "title_s", "25 star General"));
+  
+      assertU(adoc("id", "46",
+          fname, "Obnoxious",
+          "subject_s", "Defeated the pacifists of the Gandhi nebula"));
+  
+      assertU(commit());
+  
+      assertU(adoc("id", "47",
+          fname, "Pig",
+          "text_t", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
+      assertU(commit());
+  
+      assertQ("checking facets when one has missing=true&mincount=2 and the other has missing=false&mincount=0",
+              req("q", "id:[42 TO 47]"
+                  ,"facet", "true"
+                  ,"facet.zeros", "false"
+                  ,"fq", "id:[42 TO 45]"
+                  ,"facet.field", "{!key=foo " +
+                     "facet.mincount=0 "+
+                     "facet.missing=false "+
+                  "}"+fname
+                  ,"facet.field", "{!key=bar " +
+                     "facet.mincount=2 "+
+                     "facet.missing=true "+
+                  "}"+fname
+                  )
+              ,"*[count(//doc)=4]"
+              ,"*[count(//lst[@name='foo']/int)=4]"
+              ,"*[count(//lst[@name='bar']/int)=2]"
+              ,"//lst[@name='foo']/int[@name='Tool'][.='2']"
+              ,"//lst[@name='foo']/int[@name='Obnoxious'][.='1']"
+              ,"//lst[@name='foo']/int[@name='Chauvinist'][.='1']"
+              ,"//lst[@name='foo']/int[@name='Pig'][.='0']"
+              ,"//lst[@name='foo']/int[@name='Tool'][.='2']"
+              ,"//lst[@name='bar']/int[not(@name)][.='1']"
+              );
+  
+      assertQ("checking facets when one has missing=true&mincount=2 and the other has missing=false&mincount=0",
+              req("q", "id:[42 TO 47]"
+                  ,"facet", "true"
+                  ,"facet.zeros", "false"
+                  ,"fq", "id:[42 TO 45]"
+                  ,"facet.field", "{!key=foo " +
+                      "facet.prefix=Too "+
+                  "}"+fname
+                  ,"facet.field", "{!key=bar " +
+                      "facet.limit=2 "+
+                      "facet.sort=false "+
+                  "}"+fname
+                  )
+              ,"*[count(//doc)=4]"
+              ,"*[count(//lst[@name='foo']/int)=1]"
+              ,"*[count(//lst[@name='bar']/int)=2]"
+              ,"//lst[@name='foo']/int[@name='Tool'][.='2']"
+              ,"//lst[@name='bar']/int[@name='Chauvinist'][.='1']"
+              ,"//lst[@name='bar']/int[@name='Obnoxious'][.='1']"
+              );
+      clearIndex();
+      assertU(commit());
+  }
+}
+