You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/11/17 15:36:54 UTC

svn commit: r1036064 - /lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java

Author: yonik
Date: Wed Nov 17 14:36:54 2010
New Revision: 1036064

URL: http://svn.apache.org/viewvc?rev=1036064&view=rev
Log:
tests: enable grouping tests

Modified:
    lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java

Modified: lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java?rev=1036064&r1=1036063&r2=1036064&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java (original)
+++ lucene/dev/trunk/solr/src/test/org/apache/solr/TestGroupingSearch.java Wed Nov 17 14:36:54 2010
@@ -320,41 +320,98 @@ public class TestGroupingSearch extends 
      assertJQ(req("q","id:"+doc.id), "/response/numFound==1");
     **/
 
-    int indexIter=0;  // make >0 to enable test
-    int queryIter=1000;
+    int indexIter=50 * RANDOM_MULTIPLIER;  // make >0 to enable test
+    int queryIter=100 * RANDOM_MULTIPLIER;
 
     while (--indexIter >= 0) {
 
+      int indexSize = random.nextInt(25 * RANDOM_MULTIPLIER);
+
       List<FldType> types = new ArrayList<FldType>();
-      types.add(new FldType("id",ONE_ONE, new SVal('A','Z',2,2)));
+      types.add(new FldType("id",ONE_ONE, new SVal('A','Z',4,4)));
       types.add(new FldType("score_f",ONE_ONE, new FVal(1,100)));  // field used to score
-      types.add(new FldType("foo_i",ONE_ONE, new IRange(0,10)));
+      types.add(new FldType("foo_i",ONE_ONE, new IRange(0,indexSize)));
       types.add(new FldType("foo_s",ONE_ONE, new SVal('a','z',1,2)));
+      types.add(new FldType("small_s",ONE_ONE, new SVal('a',(char)('c'+indexSize/10),1,1)));
+      types.add(new FldType("small_i",ONE_ONE, new IRange(0,5+indexSize/10)));
 
-      Map<Comparable, Doc> model = indexDocs(types, null, 2);
-      System.out.println("############### model=" + model);
+      clearIndex();
+      Map<Comparable, Doc> model = indexDocs(types, null, indexSize);
+      //System.out.println("############### model=" + model);
+
+      // test with specific docs
+      if (false) {
+        clearIndex();
+        model.clear();
+        Doc d1 = createDoc(types);
+        d1.getValues("small_s").set(0,"c");
+        d1.getValues("small_i").set(0,5);
+        d1.order = 0;
+        updateJ(toJSON(d1), params("commit","true"));
+        model.put(d1.id, d1);
+
+        d1 = createDoc(types);
+        d1.getValues("small_s").set(0,"b");
+        d1.getValues("small_i").set(0,5);
+        d1.order = 1;
+        updateJ(toJSON(d1), params("commit","false"));
+        model.put(d1.id, d1);
+
+        d1 = createDoc(types);
+        d1.getValues("small_s").set(0,"c");
+        d1.getValues("small_i").set(0,5);
+        d1.order = 2;
+        updateJ(toJSON(d1), params("commit","false"));
+        model.put(d1.id, d1);
+
+        d1 = createDoc(types);
+        d1.getValues("small_s").set(0,"c");
+        d1.getValues("small_i").set(0,5);
+        d1.order = 3;
+        updateJ(toJSON(d1), params("commit","false"));
+        model.put(d1.id, d1);
+
+        d1 = createDoc(types);
+        d1.getValues("small_s").set(0,"b");
+        d1.getValues("small_i").set(0,2);
+        d1.order = 4;
+        updateJ(toJSON(d1), params("commit","true"));
+        model.put(d1.id, d1);
+      }
 
 
       for (int qiter=0; qiter<queryIter; qiter++) {
         String groupField = types.get(random.nextInt(types.size())).fname;
 
-        Map<Comparable, Grp> groups = groupBy(model.values(), groupField);
-        int rows = random.nextInt(11)-1;
+        int rows = random.nextInt(10)==0 ? random.nextInt(model.size()+2) : random.nextInt(11)-1;
         int start = random.nextInt(5)==0 ? random.nextInt(model.size()+2) : random.nextInt(5); // pick a small start normally for better coverage
-        int group_limit = random.nextInt(11)-1;
-group_limit = random.nextInt(10)+1;
+        int group_limit = random.nextInt(10)==0 ? random.nextInt(model.size()+2) : random.nextInt(11)-1;
+// TODO: remove restriction on 0
+group_limit = random.nextInt(10)+1;      
         int group_offset = random.nextInt(10)==0 ? random.nextInt(model.size()+2) : random.nextInt(2); // pick a small start normally for better coverage
 
-        // sort each group
         String[] stringSortA = new String[1];
-        Comparator<Doc> groupComparator = createSort(h.getCore().getSchema(), types, stringSortA);
+        Comparator<Doc> sortComparator = createSort(h.getCore().getSchema(), types, stringSortA);
+        String sortStr = stringSortA[0];
+        Comparator<Doc> groupComparator = random.nextBoolean() ? sortComparator : createSort(h.getCore().getSchema(), types, stringSortA);
         String groupSortStr = stringSortA[0];
 
-        // Test specific sort
-        /***
-         groupComparator = createComparator("_docid_", false, false, false);
-         stringSort = "_docid_ desc";
-         ***/
+// TODO: fix/support different groupComparator
+groupComparator = sortComparator;
+groupSortStr = null;
+// rows=1; start=0; group_offset=1; group_limit=1;
+        
+         // Test specific case
+        if (false) {
+          groupField="small_i";
+          sortComparator=createComparator(Arrays.asList(createComparator("small_s", true, true, false)));
+          sortStr = "small_s asc";
+          groupComparator = createComparator(Arrays.asList(createComparator("small_s", true, true, false)));
+          groupSortStr = "small_s asc";
+          rows=1; start=0; group_offset=1; group_limit=1;
+        }
+
+        Map<Comparable, Grp> groups = groupBy(model.values(), groupField);
 
         // first sort the docs in each group
         for (Grp grp : groups.values()) {
@@ -362,8 +419,6 @@ group_limit = random.nextInt(10)+1;
         }
 
         // now sort the groups by the first doc in that group
-        Comparator<Doc> sortComparator = random.nextBoolean() ? groupComparator : createSort(h.getCore().getSchema(), types, stringSortA);
-        String sortStr = stringSortA[0];
 
         List<Grp> sortedGroups = new ArrayList(groups.values());
         Collections.sort(sortedGroups, createFirstDocComparator(sortComparator));
@@ -372,7 +427,7 @@ group_limit = random.nextInt(10)+1;
 
         // TODO: create a random filter too
 
-        SolrQueryRequest req = req("group","true","wt","json","indent","true", "q","{!func}score_f", "group.field",groupField
+        SolrQueryRequest req = req("group","true","wt","json","indent","true", "echoParams","all", "q","{!func}score_f", "group.field",groupField
             ,sortStr==null ? "nosort":"sort", sortStr ==null ? "": sortStr
             ,(groupSortStr==null || groupSortStr==sortStr) ? "nosort":"group.sort", groupSortStr==null ? "": groupSortStr
             ,"rows",""+rows, "start",""+start, "group.offset",""+group_offset, "group.limit",""+group_limit
@@ -384,11 +439,15 @@ group_limit = random.nextInt(10)+1;
         String err = JSONTestUtil.matchObj("/grouped/"+groupField, realResponse, modelResponse);
         if (err != null) {
           log.error("GROUPING MISMATCH: " + err
+           + "\n\trequest="+req
            + "\n\tresult="+strResponse
            + "\n\texpected="+ JSONUtil.toJSON(modelResponse)
            + "\n\tsorted_model="+ sortedGroups
           );
 
+          // re-execute the request... good for putting a breakpoint here for debugging
+          String rsp = h.query(req);
+
           fail(err);
         }
       } // end query iter