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 yo...@apache.org on 2009/08/07 16:27:23 UTC

svn commit: r802020 - in /lucene/solr/trunk/src/test: org/apache/solr/TestDistributedSearch.java test-files/solr/conf/schema.xml

Author: yonik
Date: Fri Aug  7 14:27:23 2009
New Revision: 802020

URL: http://svn.apache.org/viewvc?rev=802020&view=rev
Log:
TestDistributedSearch - add random values for all numeric field types, sort asc and desc on all numeric field types

Modified:
    lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java
    lucene/solr/trunk/src/test/test-files/solr/conf/schema.xml

Modified: lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java?rev=802020&r1=802019&r2=802020&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/TestDistributedSearch.java Fri Aug  7 14:27:23 2009
@@ -28,8 +28,10 @@
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.schema.TrieDateField;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.*;
 
 import junit.framework.TestCase;
@@ -43,7 +45,7 @@
  * @since solr 1.3
  */
 public class TestDistributedSearch extends TestCase {
-  Random r = new Random(0);
+  static Random r = new Random(0);
   File testDir;
   
   SolrServer controlClient;
@@ -58,12 +60,23 @@
   String id="id";
   String t1="a_t";
   String i1="a_si";
-  String tlong = "tlong";
+  String nint = "n_i";
+  String tint = "n_ti";
+  String nfloat = "n_f";
+  String tfloat = "n_tf";
+  String ndouble = "n_d";
+  String tdouble = "n_td";
+  String nlong = "n_l";
+  String tlong = "n_tl";
+  String ndate = "n_dt";
+  String tdate = "n_tdt";
+  
   String oddField="oddField_s";
   String missingField="missing_but_valid_field_t";
   String invalidField="invalid_field_not_in_schema";
 
 
+
   @Override public void setUp() throws Exception
   {
     System.setProperty("solr.test.sys.prop1", "propone");
@@ -131,12 +144,28 @@
     }
   }
 
+  void addFields(SolrInputDocument doc, Object... fields) {
+    for (int i=0; i<fields.length; i+=2) {
+      doc.addField((String)(fields[i]), fields[i+1]);
+    }   
+  }
 
+  // add random fields to the documet before indexing
+  void indexr(Object ... fields) throws Exception {
+    SolrInputDocument doc = new SolrInputDocument();
+    addFields(doc, fields);
+    addFields(doc, "rnd_b", true);
+    addFields(doc, getRandFields(fieldNames, randVals));
+    indexDoc(doc);
+  }
+  
   void index(Object... fields) throws Exception {
     SolrInputDocument doc = new SolrInputDocument();
-    for (int i=0; i<fields.length; i+=2) {
-      doc.addField((String)(fields[i]), fields[i+1]);
-    }
+    addFields(doc, fields);
+    indexDoc(doc);
+  }
+
+  void indexDoc(SolrInputDocument doc) throws IOException, SolrServerException {
     controlClient.add(doc);
 
     int which = (doc.getField(id).toString().hashCode() &0x7fffffff) % clients.size();
@@ -144,6 +173,8 @@
     client.add(doc);
   }
 
+
+
   void index_specific(int serverNumber, Object... fields) throws Exception {
     SolrInputDocument doc = new SolrInputDocument();
     for (int i=0; i<fields.length; i+=2) {
@@ -464,37 +495,117 @@
     }
   }
 
+
+
+  public static abstract class RandVal {
+    public static Random r = new Random();
+    public static Set uniqueValues = new HashSet();
+    public abstract Object val();
+    public Object uval() {
+      for(;;) {
+        Object v = val();
+        if (uniqueValues.add(v)) return v;
+      }
+    }
+  }
+
+  public static RandVal rint = new RandVal() {
+    public Object val() {
+      return r.nextInt();
+    }
+  };
+
+  public static RandVal rlong = new RandVal() {
+    public Object val() {
+      return r.nextLong();
+    }
+  };
+
+  public static RandVal rfloat = new RandVal() {
+    public Object val() {
+      return r.nextFloat();
+    }
+  };
+
+  public static RandVal rdouble = new RandVal() {
+    public Object val() {
+      return r.nextDouble();
+    }
+  };
+
+  public static class RandDate extends RandVal {
+    public static TrieDateField df = new TrieDateField();
+
+    public Object val() {
+      long v = r.nextLong();
+        Date d = new Date(v);
+        return df.toExternal(d);
+      }
+  }
+
+  public static RandVal rdate = new RandDate();
+
+  public static String[] fieldNames = new String[]     {"n_ti", "n_f", "n_tf", "n_d", "n_td", "n_l", "n_tl", "n_dt", "n_tdt"};
+  public static RandVal[] randVals = new RandVal[] {rint,   rfloat,rfloat, rdouble,rdouble,rlong,rlong,  rdate,  rdate};
+
+  public static Object[] getRandFields(String[] fields, RandVal[] randVals) {
+    Object[] o = new Object[fields.length*2];
+    for (int i=0; i<fields.length; i++) {
+     o[i*2] = fields[i];
+     o[i*2+1] = randVals[i].uval();
+    }
+    return o;
+  }
+
   public void doTest() throws Exception {
+    RandVal.uniqueValues = new HashSet();   // reset unique random values
+
     del("*:*");
-    index(id,1, i1, 100, tlong, 100,t1,"now is the time for all good men"
+    indexr(id,1, i1, 100, tlong, 100,t1,"now is the time for all good men"
             ,"foo_f", 1.414f, "foo_b", "true", "foo_d", 1.414d);
-    index(id,2, i1, 50 , tlong, 50,t1,"to come to the aid of their country.");
-    index(id,3, i1, 2, tlong, 2,t1,"how now brown cow");
-    index(id,4, i1, -100 ,tlong, 101,t1,"the quick fox jumped over the lazy dog");
-    index(id,5, i1, 500, tlong, 500 ,t1,"the quick fox jumped way over the lazy dog");
-    index(id,6, i1, -600, tlong, 600 ,t1,"humpty dumpy sat on a wall");
-    index(id,7, i1, 123, tlong, 123 ,t1,"humpty dumpy had a great fall");
-    index(id,8, i1, 876, tlong, 876,t1,"all the kings horses and all the kings men");
-    index(id,9, i1, 7, tlong, 7,t1,"couldn't put humpty together again");
-    index(id,10, i1, 4321, tlong, 4321,t1,"this too shall pass");
-    index(id,11, i1, -987, tlong, 987,t1,"An eye for eye only ends up making the whole world blind.");
-    index(id,12, i1, 379, tlong, 379,t1,"Great works are performed, not by strength, but by perseverance.");
-    index(id,13, i1, 232, tlong, 232,t1,"no eggs on wall, lesson learned", oddField, "odd man out");
-
-    index(id, 14, "SubjectTerms_mfacet", new String[]  {"mathematical models", "mathematical analysis"});
-    index(id, 15, "SubjectTerms_mfacet", new String[]  {"test 1", "test 2", "test3"});
-    index(id, 16, "SubjectTerms_mfacet", new String[]  {"test 1", "test 2", "test3"});
+    indexr(id,2, i1, 50 , tlong, 50,t1,"to come to the aid of their country."
+    );
+    indexr(id,3, i1, 2, tlong, 2,t1,"how now brown cow"
+    );
+    indexr(id,4, i1, -100 ,tlong, 101,t1,"the quick fox jumped over the lazy dog"
+    );
+    indexr(id,5, i1, 500, tlong, 500 ,t1,"the quick fox jumped way over the lazy dog"
+    );
+    indexr(id,6, i1, -600, tlong, 600 ,t1,"humpty dumpy sat on a wall");
+    indexr(id,7, i1, 123, tlong, 123 ,t1,"humpty dumpy had a great fall");
+    indexr(id,8, i1, 876, tlong, 876,t1,"all the kings horses and all the kings men");
+    indexr(id,9, i1, 7, tlong, 7,t1,"couldn't put humpty together again");
+    indexr(id,10, i1, 4321, tlong, 4321,t1,"this too shall pass");
+    indexr(id,11, i1, -987, tlong, 987,t1,"An eye for eye only ends up making the whole world blind.");
+    indexr(id,12, i1, 379, tlong, 379,t1,"Great works are performed, not by strength, but by perseverance.");
+    indexr(id,13, i1, 232, tlong, 232,t1,"no eggs on wall, lesson learned", oddField, "odd man out");
+
+    indexr(id, 14, "SubjectTerms_mfacet", new String[]  {"mathematical models", "mathematical analysis"});
+    indexr(id, 15, "SubjectTerms_mfacet", new String[]  {"test 1", "test 2", "test3"});
+    indexr(id, 16, "SubjectTerms_mfacet", new String[]  {"test 1", "test 2", "test3"});
     String[] vals = new String[100];
     for (int i=0; i<100; i++) {
       vals[i] = "test " + i;
     }
-    index(id, 17, "SubjectTerms_mfacet", vals);
+    indexr(id, 17, "SubjectTerms_mfacet", vals);
+
+    for (int i=100; i<150; i++) {
+      indexr(id, i);      
+    }
+
     commit();
 
     handle.clear();
     handle.put("QTime", SKIPVAL);
     handle.put("timestamp", SKIPVAL);
 
+    // random value sort
+    for (String f : fieldNames) {
+      query("q","*:*", "sort",f+" desc");
+      query("q","*:*", "sort",f+" asc");
+    }
+
+
     // these queries should be exactly ordered and scores should exactly match
     query("q","*:*", "sort",i1+" desc");
     query("q","*:*", "sort",i1+" asc");

Modified: lucene/solr/trunk/src/test/test-files/solr/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/schema.xml?rev=802020&r1=802019&r2=802020&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/schema.xml (original)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/schema.xml Fri Aug  7 14:27:23 2009
@@ -119,8 +119,8 @@
     <!-- format for date is 1995-12-31T23:59:59.999Z and only the fractional
          seconds part (.999) is optional.
       -->
-    <fieldtype name="date" class="solr.DateField" sortMissingLast="true"/>
-    <fieldtype name="tdate" class="solr.TrieDateField" sortMissingLast="true" precisionStep="6"/>
+    <fieldtype name="date" class="solr.TrieDateField" precisionStep="0"/>
+    <fieldtype name="tdate" class="solr.TrieDateField" precisionStep="6"/>
     <fieldtype name="pdate" class="solr.DateField" sortMissingLast="true"/>
 
 
@@ -465,6 +465,13 @@
    <dynamicField name="*_dt" type="date"    indexed="true"  stored="true"/>
    <dynamicField name="*_bcd" type="bcdstr" indexed="true"  stored="true"/>
 
+      <!-- some trie-coded dynamic fields for faster range queries -->
+   <dynamicField name="*_ti" type="tint"    indexed="true"  stored="true"/>
+   <dynamicField name="*_tl" type="tlong"   indexed="true"  stored="true"/>
+   <dynamicField name="*_tf" type="tfloat"  indexed="true"  stored="true"/>
+   <dynamicField name="*_td" type="tdouble" indexed="true"  stored="true"/>
+   <dynamicField name="*_tdt" type="tdate"  indexed="true"  stored="true"/>
+
    <dynamicField name="*_si"  type="sint"  indexed="true"  stored="true"/>
    <dynamicField name="*_sl"  type="slong"  indexed="true"  stored="true"/>
    <dynamicField name="*_sf"  type="sfloat"  indexed="true"  stored="true"/>