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 2017/06/15 17:41:47 UTC

lucene-solr:branch_6x: SOLR-10795: Better testing of PointFields multivalued sort using field(name, min|max) syntax

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 85615c6ec -> ddc128b10


SOLR-10795: Better testing of PointFields multivalued sort using field(name, min|max) syntax


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/ddc128b1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/ddc128b1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/ddc128b1

Branch: refs/heads/branch_6x
Commit: ddc128b1099723e8cc2e588958f9043cb9f73bb0
Parents: 85615c6
Author: Tomas Fernandez Lobbe <tf...@apache.org>
Authored: Thu Jun 15 10:06:37 2017 -0700
Committer: Tomas Fernandez Lobbe <tf...@apache.org>
Committed: Thu Jun 15 10:41:33 2017 -0700

----------------------------------------------------------------------
 .../solr/collection1/conf/schema11.xml          |   5 +-
 .../function/TestMinMaxOnMultiValuedField.java  | 145 ++++++++++++++-----
 2 files changed, 109 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ddc128b1/solr/core/src/test-files/solr/collection1/conf/schema11.xml
----------------------------------------------------------------------
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema11.xml b/solr/core/src/test-files/solr/collection1/conf/schema11.xml
index 819b6d1..8b0b06c 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema11.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema11.xml
@@ -363,7 +363,8 @@ valued. -->
    <dynamicField name="*_l"    type="${solr.tests.longClass:plong}"   indexed="true"  stored="true"/>
    <dynamicField name="*_f"    type="${solr.tests.floatClass:pfloat}"  indexed="true"  stored="true"/>
    <dynamicField name="*_d"    type="${solr.tests.doubleClass:pdouble}" indexed="true"  stored="true"/>
-
+   
+    <!-- Test trie fields explicitly -->
    <dynamicField name="*_ti"      type="tint"    indexed="true"  stored="true"/>
    <dynamicField name="*_ti_dv"   type="tint"    indexed="true"  stored="true" docValues="true"/>
    <dynamicField name="*_ti_ni_dv"   type="tint"    indexed="false"  stored="true" docValues="true"/>
@@ -418,6 +419,8 @@ valued. -->
    <dynamicField name="*_dt_ni_p"   type="pdate"    indexed="false"  stored="true" docValues="true"/>
    <dynamicField name="*_dts_ni_p"   type="pdate"    indexed="false"  stored="true" docValues="true" multiValued="true"/>
 
+   <dynamicField name="*_is_ndv_p"   type="pint"    indexed="true"  stored="true" docValues="false" multiValued="true"/>
+
    <dynamicField name="*_t"  type="text"    indexed="true"  stored="true"/>
    <dynamicField name="*_b"  type="boolean" indexed="true"  stored="true"/>
    <dynamicField name="*_dt" type="${solr.tests.dateClass:pdate}"    indexed="true"  stored="true"/>

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/ddc128b1/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java b/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
index f725994..c4d6253 100644
--- a/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
+++ b/solr/core/src/test/org/apache/solr/search/function/TestMinMaxOnMultiValuedField.java
@@ -18,12 +18,15 @@ package org.apache.solr.search.function;
 
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.apache.lucene.util.TestUtil;
-
 import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.SchemaField;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.schema.DoubleValueFieldType;
+import org.apache.solr.schema.FloatValueFieldType;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.IntValueFieldType;
+import org.apache.solr.schema.LongValueFieldType;
+import org.apache.solr.schema.SchemaField;
 import org.junit.Before;
 import org.junit.BeforeClass;
 
@@ -34,16 +37,20 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
   @BeforeClass
   public static void beforeClass() throws Exception {
     initCore("solrconfig-functionquery.xml","schema11.xml");
-
-    // sanity check the expected properties of our fields (ie: who broke the schema?)
+    checkFields(new String[] {"i", "l", "f", "d"}, new String [] {"_p", "_ni_p"});
+    checkFields(new String[] {"ti", "tl", "tf", "td"}, new String [] {"", "_dv", "_ni_dv"});
+  }
+  
+  private static void checkFields(String[] types, String[] suffixes) {
+ // sanity check the expected properties of our fields (ie: who broke the schema?)
     IndexSchema schema = h.getCore().getLatestSchema();
-    for (String type : new String[] {"i", "l", "f", "d"}) {
-      for (String suffix : new String [] {"", "_dv", "_ni_dv"}) {
-        String f = "val_t" + type + "s" + suffix;
+    for (String type : types) {
+      for (String suffix : suffixes) {
+        String f = "val_" + type + "s" + suffix;
         SchemaField sf = schema.getField(f);
         assertTrue(f + " is not multivalued", sf.multiValued());
         assertEquals(f + " doesn't have expected docValues status",
-                     f.contains("dv"), sf.hasDocValues());
+                     f.contains("dv") || sf.getType().isPointField(), sf.hasDocValues());
         assertEquals(f + " doesn't have expected index status",
                      ! f.contains("ni"), sf.indexed());
       }
@@ -56,49 +63,62 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
     assertU(delQ("*:*"));
     assertU(commit());
   }
-
+  
   public void testBasics() throws Exception {
+    testBasics("val_tis_dv", "val_tls_dv", "val_tfs_dv", "val_tds_dv");
+    testBasics("val_tis_ni_dv", "val_tls_ni_dv", "val_tfs_ni_dv", "val_tds_ni_dv");
+    testBasics("val_is_p", "val_ls_p", "val_fs_p", "val_ds_p");
+    testBasics("val_is_ni_p", "val_ls_ni_p", "val_fs_ni_p", "val_ds_ni_p");
+  }
+
+  private void testBasics(String intField, String longField, String floatField, String doubleField) throws Exception {
+    assertTrue("Unexpected int field", h.getCore().getLatestSchema().getField(intField).getType() instanceof IntValueFieldType);
+    assertTrue("Unexpected long field", h.getCore().getLatestSchema().getField(longField).getType() instanceof LongValueFieldType);
+    assertTrue("Unexpected float field", h.getCore().getLatestSchema().getField(floatField).getType() instanceof FloatValueFieldType);
+    assertTrue("Unexpected double field", h.getCore().getLatestSchema().getField(doubleField).getType() instanceof DoubleValueFieldType);
+
+    assertU(delQ("*:*"));
     assertU(adoc(sdoc("id", "1"
                       // int
-                      ,"val_tis_dv", "42"
-                      ,"val_tis_dv", "9"
-                      ,"val_tis_dv", "-54"
+                      ,intField, "42"
+                      ,intField, "9"
+                      ,intField, "-54"
                       // long
-                      ,"val_tls_dv", "420"
-                      ,"val_tls_dv", "90"
-                      ,"val_tls_dv", "-540"
+                      ,longField, "420"
+                      ,longField, "90"
+                      ,longField, "-540"
                       // float
-                      ,"val_tfs_dv", "-42.5"
-                      ,"val_tfs_dv", "-4.5"
-                      ,"val_tfs_dv", "-13.5"
+                      ,floatField, "-42.5"
+                      ,floatField, "-4.5"
+                      ,floatField, "-13.5"
                       // double
-                      ,"val_tds_dv", "-420.5"
-                      ,"val_tds_dv", "-40.5"
-                      ,"val_tds_dv", "-130.5"
+                      ,doubleField, "-420.5"
+                      ,doubleField, "-40.5"
+                      ,doubleField, "-130.5"
                       )));
     assertU(commit());
 
     assertQ(req("q","id:1"
                 // int
-                ,"fl","exists_min_i:exists(field(val_tis_dv,min))"
-                ,"fl","exists_max_i:exists(field(val_tis_dv,max))"
-                ,"fl","min_i:field(val_tis_dv,min)"
-                ,"fl","max_i:field(val_tis_dv,max)"
+                ,"fl","exists_min_i:exists(field(" + intField + ",min))"
+                ,"fl","exists_max_i:exists(field(" + intField + ",max))"
+                ,"fl","min_i:field(" + intField + ",min)"
+                ,"fl","max_i:field(" + intField + ",max)"
                 // long
-                ,"fl","exists_min_l:exists(field(val_tls_dv,min))"
-                ,"fl","exists_max_l:exists(field(val_tls_dv,max))"
-                ,"fl","min_l:field(val_tls_dv,min)"
-                ,"fl","max_l:field(val_tls_dv,max)"
+                ,"fl","exists_min_l:exists(field(" + longField + ",min))"
+                ,"fl","exists_max_l:exists(field(" + longField + ",max))"
+                ,"fl","min_l:field(" + longField + ",min)"
+                ,"fl","max_l:field(" + longField + ",max)"
                 // float
-                ,"fl","exists_min_f:exists(field(val_tfs_dv,min))"
-                ,"fl","exists_max_f:exists(field(val_tfs_dv,max))"
-                ,"fl","min_f:field(val_tfs_dv,min)"
-                ,"fl","max_f:field(val_tfs_dv,max)"
+                ,"fl","exists_min_f:exists(field(" + floatField + ",min))"
+                ,"fl","exists_max_f:exists(field(" + floatField + ",max))"
+                ,"fl","min_f:field(" + floatField + ",min)"
+                ,"fl","max_f:field(" + floatField + ",max)"
                 // double
-                ,"fl","exists_min_d:exists(field(val_tds_dv,min))"
-                ,"fl","exists_max_d:exists(field(val_tds_dv,max))"
-                ,"fl","min_d:field(val_tds_dv,min)"
-                ,"fl","max_d:field(val_tds_dv,max)"
+                ,"fl","exists_min_d:exists(field(" + doubleField + ",min))"
+                ,"fl","exists_max_d:exists(field(" + doubleField + ",max))"
+                ,"fl","min_d:field(" + doubleField + ",min)"
+                ,"fl","max_d:field(" + doubleField + ",max)"
                 
                 )
             ,"//*[@numFound='1']"
@@ -127,12 +147,16 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
 
   }
 
-  
   @AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/LUCENE-6709")
   public void testIntFieldCache() {
     testSimpleInt("val_tis");
   }
   
+  public void testPointInt() {
+    testSimpleInt("val_is_p");
+    testSimpleInt("val_is_ni_p");
+  }
+  
   public void testIntDocValues() {
     testSimpleInt("val_tis_dv");
     testSimpleInt("val_tis_ni_dv");
@@ -147,6 +171,11 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
     testSimpleLong("val_tls_dv");
     testSimpleLong("val_tls_ni_dv");
   }
+  
+  public void testPointLong() {
+    testSimpleLong("val_ls_p");
+    testSimpleLong("val_ls_ni_p");
+  }
 
 
   @AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/LUCENE-6709")
@@ -159,6 +188,11 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
     testSimpleFloat("val_tfs_ni_dv");
   }
   
+  public void testPointFloat() {
+    testSimpleFloat("val_fs_p");
+    testSimpleFloat("val_fs_ni_p");
+  }
+  
   @AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/LUCENE-6709")
   public void testDoubleFieldCache() {
     testSimpleDouble("val_tds");
@@ -169,6 +203,11 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
     testSimpleDouble("val_tds_ni_dv");
   }
 
+  public void testPointDouble() {
+    testSimpleDouble("val_ds_p");
+    testSimpleDouble("val_ds_ni_p");
+  }
+
   public void testBadRequests() {
 
     // useful error msg when bogus selector is requested (ie: not min or max)
@@ -176,6 +215,11 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
               "hoss",
               req("q","*:*", "fl", "field(val_tds_dv,'hoss')"),
               SolrException.ErrorCode.BAD_REQUEST);
+
+    assertQEx("no error asking for bogus selector",
+        "hoss",
+        req("q","*:*", "fl", "field(val_ds_p,'hoss')"),
+        SolrException.ErrorCode.BAD_REQUEST);
     
     // useful error until/unless LUCENE-6709
     assertQEx("no error asking for max on a non docVals field",
@@ -200,6 +244,15 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
               "string",
               req("q","*:*", "fl", "field(cat_docValues,'max')"),
               SolrException.ErrorCode.BAD_REQUEST);
+    
+    // MultiValued point field with dv=false
+    assertFalse(h.getCore().getLatestSchema().getField("val_is_ndv_p").hasDocValues());
+    assertTrue(h.getCore().getLatestSchema().getField("val_is_ndv_p").getType().isPointField());
+    assertTrue(h.getCore().getLatestSchema().getField("val_is_ndv_p").multiValued());
+    assertQEx("no error asking for non-dv point fields",
+              "docValues",
+              req("q","*:*", "fl", "field(val_is_ndv_p,'max')"),
+              SolrException.ErrorCode.BAD_REQUEST);
 
   }
 
@@ -212,12 +265,18 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
       vals[i] = random().nextInt();
     }
     testSimpleValues("val_tis_dv", int.class, vals);
+    testSimpleValues("val_is_p", int.class, vals);
+    testSimpleValues("val_tis_ni_dv", int.class, vals);
+    testSimpleValues("val_is_ni_p", int.class, vals);
 
     // random longs
     for (int i = 0; i < vals.length; i++) {
       vals[i] = random().nextLong();
     }
     testSimpleValues("val_tls_dv", long.class, vals);
+    testSimpleValues("val_ls_p", long.class, vals);
+    testSimpleValues("val_tls_ni_dv", long.class, vals);
+    testSimpleValues("val_ls_ni_p", long.class, vals);
     
     // random floats
     for (int i = 0; i < vals.length; i++) {
@@ -229,6 +288,9 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
       vals[i] = f;
     }
     testSimpleValues("val_tfs_dv", float.class, vals);
+    testSimpleValues("val_fs_p", float.class, vals);
+    testSimpleValues("val_tfs_ni_dv", float.class, vals);
+    testSimpleValues("val_fs_ni_p", float.class, vals);
     
     // random doubles
     for (int i = 0; i < vals.length; i++) {
@@ -240,6 +302,9 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
       vals[i] = d;
     }
     testSimpleValues("val_tds_dv", double.class, vals);
+    testSimpleValues("val_ds_p", double.class, vals);
+    testSimpleValues("val_tds_ni_dv", double.class, vals);
+    testSimpleValues("val_ds_ni_p", double.class, vals);
 
   }
 
@@ -309,7 +374,7 @@ public class TestMinMaxOnMultiValuedField extends SolrTestCaseJ4 {
   }
   
   /** Tests a single doc with a few explicit values, as well as testing exists with and w/o values */
-  protected void testSimpleValues(final String fieldname, final Class clazz, final Comparable... vals) {
+  protected void testSimpleValues(final String fieldname, final Class<?> clazz, final Comparable... vals) {
     clearIndex();
     
     assert 0 < vals.length;