You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by tf...@apache.org on 2015/04/25 07:12:53 UTC

svn commit: r1675995 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/core/ solr/core/src/java/org/apache/solr/request/ solr/core/src/test-files/solr/collection1/conf/ solr/core/src/test/org/apache/solr/request/

Author: tflobbe
Date: Sat Apr 25 05:12:53 2015
New Revision: 1675995

URL: http://svn.apache.org/r1675995
Log:
SOLR-7471: Stop requiring docValues for interval faceting

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
    lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Sat Apr 25 05:12:53 2015
@@ -165,6 +165,8 @@ Other Changes
 
 * SOLR-7467: Upgrade t-digest to 3.1 (hossman)
 
+* SOLR-7471: Stop requiring docValues for interval faceting (Tomás Fernández Löbbe)
+
 ==================  5.1.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/request/SimpleFacets.java Sat Apr 25 05:12:53 2015
@@ -98,7 +98,6 @@ import java.util.concurrent.FutureTask;
 import java.util.concurrent.RunnableFuture;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -1733,9 +1732,6 @@ public class SimpleFacets {
       parseParams(FacetParams.FACET_INTERVAL, field);
       String[] intervalStrs = required.getFieldParams(facetValue, FacetParams.FACET_INTERVAL_SET);
       SchemaField schemaField = searcher.getCore().getLatestSchema().getField(facetValue);
-      if (!schemaField.hasDocValues()) {
-        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Interval Faceting only on fields with doc values");
-      }
       if (params.getBool(GroupParams.GROUP_FACET, false)) {
         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Interval Faceting can't be used with " + GroupParams.GROUP_FACET);
       }

Modified: lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test-files/solr/collection1/conf/schema-docValuesFaceting.xml Sat Apr 25 05:12:53 2015
@@ -39,12 +39,15 @@
     <dynamicField name="*_ss_dv" type="string" indexed="false" stored="false" docValues="true"  multiValued="true"/>
     <dynamicField name="*_f"     type="float"  indexed="true"  stored="false" docValues="false"/>
     <dynamicField name="*_f_dv"  type="float"  indexed="true"  stored="false" docValues="true"/>
+    <dynamicField name="*_fs"    type="float"  indexed="true"  stored="false" docValues="false"  multiValued="true"/>
     <dynamicField name="*_fs_dv" type="float"  indexed="true"  stored="false" docValues="true"  multiValued="true"/>
     <dynamicField name="*_l"     type="long"   indexed="true"  stored="false" docValues="false"/>
     <dynamicField name="*_l_dv"  type="long"   indexed="true"  stored="false" docValues="true"/>
+    <dynamicField name="*_ls"    type="long"   indexed="true"  stored="false" docValues="false"  multiValued="true"/>
     <dynamicField name="*_ls_dv" type="long"   indexed="true"  stored="false" docValues="true"  multiValued="true"/>
     <dynamicField name="*_d"     type="double" indexed="true"  stored="false" docValues="false"/>
     <dynamicField name="*_d_dv"  type="double" indexed="true"  stored="false" docValues="true"/>
+    <dynamicField name="*_ds"    type="double" indexed="true"  stored="false" docValues="false"  multiValued="true"/>
     <dynamicField name="*_ds_dv" type="double" indexed="true"  stored="false" docValues="true"  multiValued="true"/>
     <dynamicField name="*_dt"    type="date"   indexed="true"  stored="false" docValues="false"/>
     <dynamicField name="*_dt_dv" type="date"   indexed="true"  stored="false" docValues="true"/>
@@ -58,6 +61,12 @@
   <copyField source="*_f" dest="*_f_dv" />
   <copyField source="*_is" dest="*_is_dv" />
   <copyField source="*_s" dest="*_s_dv" />
+  <copyField source="*_l" dest="*_l_dv" />
+  <copyField source="*_d" dest="*_d_dv" />
   <copyField source="*_ss" dest="*_ss_dv" />
+  <copyField source="*_is" dest="*_is_dv" />
+  <copyField source="*_fs" dest="*_fs_dv" />
+  <copyField source="*_ls" dest="*_ls_dv" />
+  <copyField source="*_ds" dest="*_ds_dv" />
   <copyField source="id" dest="id_dv" />
 </schema>

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java?rev=1675995&r1=1675994&r2=1675995&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/request/TestIntervalFaceting.java Sat Apr 25 05:12:53 2015
@@ -210,16 +210,41 @@ public class TestIntervalFaceting extend
         "//lst[@name='facet_intervals']/lst[@name='test_l_dv']/int[@name='[5,9]'][.=5]");
     
   }
+  
+  @Test
+  public void testWithFieldCache() {
+    assertU(adoc("id", "1", "test_s", "dog", "test_l", "1"));
+    assertU(adoc("id", "2", "test_s", "cat", "test_l", "2"));
+    assertU(adoc("id", "3", "test_s", "bird", "test_l", "3"));
+    assertU(adoc("id", "4", "test_s", "turtle", "test_l", "4"));
+    assertU(adoc("id", "5", "test_s", "\\goodbye,", "test_l", "5"));
+    assertU(adoc("id", "6", "test_s", ",hello\\", "test_l", "6"));
+    assertU(adoc("id", "7", "test_s", "dog", "test_l", "7"));
+    assertU(adoc("id", "8", "test_s", "dog", "test_l", "8"));
+    assertU(adoc("id", "9", "test_s", "cat", "test_l", "9"));
+    assertU(adoc("id", "10"));
+    assertU(commit());
+
+    assertQ(req("q", "*:*", "facet", "true", "facet.interval", "test_s",
+            "facet.interval", "test_l", "f.test_s.facet.interval.set", "[cat,dog]",
+            "f.test_l.facet.interval.set", "[3,6]",
+            "f.test_l.facet.interval.set", "[5,9]"),
+        "//lst[@name='facet_intervals']/lst[@name='test_s']/int[@name='[cat,dog]'][.=5]",
+        "//lst[@name='facet_intervals']/lst[@name='test_l']/int[@name='[3,6]'][.=4]",
+        "//lst[@name='facet_intervals']/lst[@name='test_l']/int[@name='[5,9]'][.=5]");
+    
+  }
 
   @Test
   @Slow
   public void testRandom() throws Exception {
     // All field values will be a number between 0 and cardinality
-    int cardinality = 1000000;
+    int cardinality = 100000;
     // Fields to use for interval faceting
     String[] fields = new String[]{"test_s_dv", "test_i_dv", "test_l_dv", "test_f_dv", "test_d_dv",
-        "test_ss_dv", "test_is_dv", "test_fs_dv", "test_ls_dv", "test_ds_dv"};
-    for (int i = 0; i < atLeast(5000); i++) {
+        "test_ss_dv", "test_is_dv", "test_fs_dv", "test_ls_dv", "test_ds_dv", "test_s", "test_i", 
+        "test_l", "test_f", "test_d", "test_ss", "test_is", "test_fs", "test_ls", "test_ds"};
+    for (int i = 0; i < atLeast(500); i++) {
       if (random().nextInt(50) == 0) {
         //have some empty docs
         assertU(adoc("id", String.valueOf(i)));
@@ -233,26 +258,26 @@ public class TestIntervalFaceting extend
       String[] docFields = new String[(random().nextInt(5)) * 10 + 12];
       docFields[0] = "id";
       docFields[1] = String.valueOf(i);
-      docFields[2] = "test_s_dv";
+      docFields[2] = "test_s";
       docFields[3] = String.valueOf(random().nextInt(cardinality));
-      docFields[4] = "test_i_dv";
+      docFields[4] = "test_i";
       docFields[5] = String.valueOf(random().nextInt(cardinality));
-      docFields[6] = "test_l_dv";
+      docFields[6] = "test_l";
       docFields[7] = String.valueOf(random().nextInt(cardinality));
-      docFields[8] = "test_f_dv";
+      docFields[8] = "test_f";
       docFields[9] = String.valueOf(random().nextFloat() * cardinality);
-      docFields[10] = "test_d_dv";
+      docFields[10] = "test_d";
       docFields[11] = String.valueOf(random().nextDouble() * cardinality);
       for (int j = 12; j < docFields.length; ) {
-        docFields[j++] = "test_ss_dv";
+        docFields[j++] = "test_ss";
         docFields[j++] = String.valueOf(random().nextInt(cardinality));
-        docFields[j++] = "test_is_dv";
+        docFields[j++] = "test_is";
         docFields[j++] = String.valueOf(random().nextInt(cardinality));
-        docFields[j++] = "test_ls_dv";
+        docFields[j++] = "test_ls";
         docFields[j++] = String.valueOf(random().nextInt(cardinality));
-        docFields[j++] = "test_fs_dv";
+        docFields[j++] = "test_fs";
         docFields[j++] = String.valueOf(random().nextFloat() * cardinality);
-        docFields[j++] = "test_ds_dv";
+        docFields[j++] = "test_ds";
         docFields[j++] = String.valueOf(random().nextDouble() * cardinality);
       }
       assertU(adoc(docFields));
@@ -262,7 +287,7 @@ public class TestIntervalFaceting extend
     }
     assertU(commit());
 
-    for (int i = 0; i < atLeast(1000); i++) {
+    for (int i = 0; i < atLeast(100); i++) {
       doTestQuery(cardinality, fields);
     }
 
@@ -321,7 +346,7 @@ public class TestIntervalFaceting extend
     Integer[] values = new Integer[2];
     values[0] = random().nextInt(max);
     values[1] = random().nextInt(max);
-    if ("test_s_dv".equals(fieldName) || "test_ss_dv".equals(fieldName)) {
+    if (fieldName.startsWith("test_s")) {
       Arrays.sort(values, new Comparator<Integer>() {
 
         @Override
@@ -796,26 +821,6 @@ public class TestIntervalFaceting extend
   }
 
   @Test
-  public void testNonDocValueFields() {
-    // there is a copyField that will copy to the dv version of the field
-    assertU(adoc("id", "1", "test_s", "dog"));
-    assertU(adoc("id", "2", "test_s", "cat"));
-    assertU(adoc("id", "3", "test_s", "bird"));
-    assertU(adoc("id", "4", "test_s", "cat"));
-    assertU(commit());
-
-    assertQ(req("q", "*:*", "facet", "true", "facet.interval", "test_s_dv",
-            "facet.interval", "test_s_dv", "f.test_s_dv.facet.interval.set", "[cat,dog]"),
-        "//lst[@name='facet_intervals']/lst[@name='test_s_dv']/int[@name='[cat,dog]'][.=3]");
-
-    assertQEx("Interval Faceting only on fields with doc values",
-        req("q", "*:*", "facet", "true", "facet.interval", "test_s",
-            "f.test_s.facet.interval.set", "[cat,dog]"),
-        SolrException.ErrorCode.BAD_REQUEST
-    );
-  }
-
-  @Test
   public void testWithDeletedDocs() {
     assertU(adoc("id", "1", "test_s_dv", "dog"));
     assertU(adoc("id", "2", "test_s_dv", "cat"));