You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/07/07 16:18:33 UTC

svn commit: r1143840 [21/22] - in /lucene/dev/branches/flexscoring: ./ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/lucene/contrib/ dev-tools/idea/lucene/contrib/demo/ dev-tools/idea/lucene/contrib/highlighter/ dev-tools/idea/lucene/contrib/...

Modified: lucene/dev/branches/flexscoring/solr/src/site/src/documentation/content/xdocs/index.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/site/src/documentation/content/xdocs/index.xml?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/site/src/documentation/content/xdocs/index.xml (original)
+++ lucene/dev/branches/flexscoring/solr/src/site/src/documentation/content/xdocs/index.xml Thu Jul  7 14:18:02 2011
@@ -66,6 +66,29 @@ customization is required.
     </section>
     <section id="news">
       <title>News</title>
+<section>
+   <title>May 2011 - Solr 3.2 Released</title>
+  <p>The Lucene PMC is pleased to announce the release of <a href="http://www.apache.org/dyn/closer.cgi/lucene/solr">Apache Solr 3.2</a>!
+  </p> 
+   <p>
+    Solr's version number was synced with Lucene following the Lucene/Solr merge, so Solr 3.2 contains Lucene 3.2.
+    Solr 3.2 is the first release after Solr 3.1.
+   </p>
+  <p>
+   Solr 3.2 release highlights include
+ </p>
+  <ul>
+    <li>Ability to specify overwrite and commitWithin as request parameters when using the JSON update format</li>
+    <li>TermQParserPlugin, useful when generating filter queries from terms returned from field faceting or the terms component.</li>
+    <li>DebugComponent now supports using a NamedList to model Explanation objects in it's responses instead of Explanation.toString</li>
+    <li>Improvements to the UIMA and Carrot2 integrations</li>
+    <li>Bugfixes and improvements from Apache Lucene 3.2</li>
+  </ul>
+     
+  <p>See the <a href="http://svn.apache.org/repos/asf/lucene/dev/tags/lucene_solr_3_2/solr/CHANGES.txt">release notes</a> for a more complete list of all the new features, improvements, and bugfixes.
+ </p>
+
+</section>
             <section>
    <title>March 2011 - Solr 3.1 Released</title>
   <p>The Lucene PMC is pleased to announce the release of <a href="http://www.apache.org/dyn/closer.cgi/lucene/solr">Apache Solr 3.1</a>!

Modified: lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java Thu Jul  7 14:18:02 2011
@@ -129,8 +129,7 @@ public class StreamingUpdateSolrServer e
                       if( fmt != null ) {
                         log.info( fmt );
                         writer.write( String.format( fmt, 
-                            params.getBool( UpdateParams.WAIT_SEARCHER, false )+"",
-                            params.getBool( UpdateParams.WAIT_FLUSH, false )+"") );
+                            params.getBool( UpdateParams.WAIT_SEARCHER, false )+"") );
                       }
                     }
                     

Modified: lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/AbstractUpdateRequest.java Thu Jul  7 14:18:02 2011
@@ -59,7 +59,6 @@ public abstract class AbstractUpdateRequ
     else if( action == ACTION.COMMIT ) {
       params.set( UpdateParams.COMMIT, "true" );
     }
-    params.set( UpdateParams.WAIT_FLUSH, String.valueOf(waitFlush));
     params.set( UpdateParams.WAIT_SEARCHER, String.valueOf(waitSearcher));
     return this;
   }
@@ -107,10 +106,6 @@ public abstract class AbstractUpdateRequ
     return res;
   }
 
-  public boolean isWaitFlush() {
-    return params != null && params.getBool(UpdateParams.WAIT_FLUSH, false);
-  }
-
   public boolean isWaitSearcher() {
     return params != null && params.getBool(UpdateParams.WAIT_SEARCHER, false);
   }
@@ -122,10 +117,6 @@ public abstract class AbstractUpdateRequ
     return null;
   }
 
-  public void setWaitFlush(boolean waitFlush) {
-    setParam( UpdateParams.WAIT_FLUSH, waitFlush+"" );
-  }
-
   public void setWaitSearcher(boolean waitSearcher) {
     setParam( UpdateParams.WAIT_SEARCHER, waitSearcher+"" );
   }

Modified: lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/CoreAdminRequest.java Thu Jul  7 14:18:02 2011
@@ -119,6 +119,7 @@ public class CoreAdminRequest extends So
   
   public static class MergeIndexes extends CoreAdminRequest {
     protected List<String> indexDirs;
+    protected List<String> srcCores;
 
     public MergeIndexes() {
       action = CoreAdminAction.MERGEINDEXES;
@@ -132,6 +133,14 @@ public class CoreAdminRequest extends So
       return indexDirs;
     }
 
+    public List<String> getSrcCores() {
+      return srcCores;
+    }
+
+    public void setSrcCores(List<String> srcCores) {
+      this.srcCores = srcCores;
+    }
+
     @Override
     public SolrParams getParams() {
       if (action == null) {
@@ -145,6 +154,35 @@ public class CoreAdminRequest extends So
           params.set(CoreAdminParams.INDEX_DIR, indexDir);
         }
       }
+      if (srcCores != null) {
+        for (String srcCore : srcCores) {
+          params.set(CoreAdminParams.SRC_CORE, srcCore);
+        }
+      }
+      return params;
+    }
+  }
+
+  public static class Unload extends CoreAdminRequest {
+    protected boolean deleteIndex;
+
+    public Unload(boolean deleteIndex) {
+      action = CoreAdminAction.UNLOAD;
+      this.deleteIndex = deleteIndex;
+    }
+
+    public boolean isDeleteIndex() {
+      return deleteIndex;
+    }
+
+    public void setDeleteIndex(boolean deleteIndex) {
+      this.deleteIndex = deleteIndex;
+    }
+
+    @Override
+    public SolrParams getParams() {
+      ModifiableSolrParams params = (ModifiableSolrParams) super.getParams();
+      params.set(CoreAdminParams.DELETE_INDEX, deleteIndex);
       return params;
     }
   }
@@ -230,11 +268,15 @@ public class CoreAdminRequest extends So
 
   public static CoreAdminResponse unloadCore( String name, SolrServer server ) throws SolrServerException, IOException
   {
-    CoreAdminRequest req = new CoreAdminRequest();
+    return unloadCore(name, false, server);
+  }
+
+  public static CoreAdminResponse unloadCore( String name, boolean deleteIndex, SolrServer server ) throws SolrServerException, IOException
+  {
+    Unload req = new Unload(deleteIndex);
     req.setCoreName( name );
-    req.setAction( CoreAdminAction.UNLOAD );
     return req.process( server );
-  }  
+  }
 
   public static CoreAdminResponse renameCore(String coreName, String newName, SolrServer server ) throws SolrServerException, IOException
   {
@@ -289,11 +331,12 @@ public class CoreAdminRequest extends So
   }
 
   public static CoreAdminResponse mergeIndexes(String name,
-      String[] indexDirs, SolrServer server) throws SolrServerException,
+      String[] indexDirs, String[] srcCores, SolrServer server) throws SolrServerException,
       IOException {
     CoreAdminRequest.MergeIndexes req = new CoreAdminRequest.MergeIndexes();
     req.setCoreName(name);
     req.setIndexDirs(Arrays.asList(indexDirs));
+    req.setSrcCores(Arrays.asList(srcCores));
     return req.process(server);
   }
 }

Modified: lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/solrj/org/apache/solr/client/solrj/request/UpdateRequest.java Thu Jul  7 14:18:02 2011
@@ -155,7 +155,6 @@ public class UpdateRequest extends Abstr
     else if( action == ACTION.COMMIT ) {
       params.set( UpdateParams.COMMIT, "true" );
     }
-    params.set( UpdateParams.WAIT_FLUSH, waitFlush+"" );
     params.set( UpdateParams.WAIT_SEARCHER, waitSearcher+"" );
     return this;
   }

Modified: lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema-trie.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema-trie.xml?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema-trie.xml (original)
+++ lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema-trie.xml Thu Jul  7 14:18:02 2011
@@ -233,7 +233,7 @@
              See the Java Regular Expression documentation for more
              infomation on pattern and replacement string syntax.
 
-             http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/package-summary.html
+             http://java.sun.com/j2se/1.6.0/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema11.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema11.xml?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema11.xml (original)
+++ lucene/dev/branches/flexscoring/solr/src/test-files/solr/conf/schema11.xml Thu Jul  7 14:18:02 2011
@@ -224,7 +224,7 @@
              See the Java Regular Expression documentation for more
              infomation on pattern and replacement string syntax.
              
-             http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/package-summary.html
+             http://java.sun.com/j2se/1.6.0/docs/api/java/util/regex/package-summary.html
           -->
         <filter class="solr.PatternReplaceFilterFactory"
                 pattern="([^a-z])" replacement="" replace="all"

Modified: lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/SolrTestCaseJ4.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/SolrTestCaseJ4.java Thu Jul  7 14:18:02 2011
@@ -41,6 +41,7 @@ import org.apache.solr.schema.IndexSchem
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.servlet.DirectSolrConnection;
+import org.apache.solr.update.SolrIndexWriter;
 import org.apache.solr.util.TestHarness;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -64,6 +65,7 @@ public abstract class SolrTestCaseJ4 ext
   @BeforeClass
   public static void beforeClassSolrTestCase() throws Exception {
     startTrackingSearchers();
+    startTrackingWriters();
     ignoreException("ignore_exception");
   }
 
@@ -72,6 +74,7 @@ public abstract class SolrTestCaseJ4 ext
     deleteCore();
     resetExceptionIgnores();
     endTrackingSearchers();
+    endTrackingWriters();
   }
   
   // SOLR-2279: hack to shut these directories down
@@ -131,6 +134,24 @@ public abstract class SolrTestCaseJ4 ext
        fail(msg);
      }
   }
+  
+  static long numWriterOpens;
+  static long numWriterCloses;
+  public static void startTrackingWriters() {
+    numOpens = SolrIndexWriter.numOpens.get();
+    numCloses = SolrIndexWriter.numCloses.get();
+  }
+
+  public static void endTrackingWriters() {
+     long endNumOpens = SolrIndexWriter.numOpens.get();
+     long endNumCloses = SolrIndexWriter.numCloses.get();
+
+     if (endNumOpens-numOpens != endNumCloses-numCloses) {
+       String msg = "ERROR: SolrIndexWriter opens=" + (endNumOpens-numWriterOpens) + " closes=" + (endNumCloses-numWriterCloses);
+       log.error(msg);
+       fail(msg);
+     }
+  }
 
   /** Causes an exception matching the regex pattern to not be logged. */
   public static void ignoreException(String pattern) {
@@ -430,6 +451,7 @@ public abstract class SolrTestCaseJ4 ext
       }
 
       for (String test : tests) {
+        if (test == null || test.length()==0) continue;
         String testJSON = test.replace('\'', '"');
 
         try {

Modified: lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/util/AbstractSolrTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/util/AbstractSolrTestCase.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/util/AbstractSolrTestCase.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test-framework/org/apache/solr/util/AbstractSolrTestCase.java Thu Jul  7 14:18:02 2011
@@ -97,11 +97,13 @@ public abstract class AbstractSolrTestCa
   @BeforeClass
   public static void beforeClassAbstractSolrTestCase() throws Exception {
     SolrTestCaseJ4.startTrackingSearchers();
+    SolrTestCaseJ4.startTrackingWriters();
   }
   
   @AfterClass
   public static void afterClassAbstractSolrTestCase() throws Exception {
     SolrTestCaseJ4.endTrackingSearchers();
+    SolrTestCaseJ4.endTrackingWriters();
   }
   
   /**

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/BasicFunctionalityTest.java Thu Jul  7 14:18:02 2011
@@ -28,9 +28,9 @@ import javax.xml.parsers.DocumentBuilder
 
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Fieldable;
+import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.LogMergePolicy;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.params.AppendedSolrParams;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.DefaultSolrParams;
@@ -49,7 +49,7 @@ import org.apache.solr.schema.IndexSchem
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
-import org.apache.solr.update.SolrIndexWriter;
+import org.apache.solr.update.DirectUpdateHandler2;
 
 
 import org.junit.BeforeClass;
@@ -120,9 +120,8 @@ public class BasicFunctionalityTest exte
     // test merge factor picked up
     SolrCore core = h.getCore();
 
-    SolrIndexWriter writer = new SolrIndexWriter("testWriter",core.getNewIndexDir(), core.getDirectoryFactory(), false, core.getSchema(), core.getSolrConfig().mainIndexConfig, core.getDeletionPolicy(), core.getCodecProvider());
-    assertEquals("Mergefactor was not picked up", ((LogMergePolicy) writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
-    writer.close();
+    IndexWriter writer = ((DirectUpdateHandler2)core.getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
+    assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
 
     lrf.args.put(CommonParams.VERSION,"2.2");
     assertQ("test query on empty index",

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/TestGroupingSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/TestGroupingSearch.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/TestGroupingSearch.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/TestGroupingSearch.java Thu Jul  7 14:18:02 2011
@@ -20,6 +20,7 @@ package org.apache.solr;
 import org.apache.lucene.search.FieldCache;
 import org.apache.noggit.JSONUtil;
 import org.apache.noggit.ObjectBuilder;
+import org.apache.solr.common.params.GroupParams;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.IndexSchema;
 import org.junit.Before;
@@ -89,6 +90,49 @@ public class TestGroupingSearch extends 
   }
 
   @Test
+  public void testGroupingGroupSortingScore_withTotalGroupCount() {
+    assertU(add(doc("id", "1","name", "author1", "title", "a book title", "group_si", "1")));
+    assertU(add(doc("id", "2","name", "author1", "title", "the title", "group_si", "2")));
+    assertU(add(doc("id", "3","name", "author2", "title", "a book title", "group_si", "1")));
+    assertU(add(doc("id", "4","name", "author2", "title", "title", "group_si", "2")));
+    assertU(add(doc("id", "5","name", "author3", "title", "the title of a title", "group_si", "1")));
+    assertU(commit());
+
+    assertQ(req("q","title:title", "group", "true", "group.field","name", "group.ngroups", "true")
+            ,"//lst[@name='grouped']/lst[@name='name']"
+            ,"//lst[@name='grouped']/lst[@name='name']/int[@name='matches'][.='5']"
+            ,"//lst[@name='grouped']/lst[@name='name']/int[@name='ngroups'][.='3']"
+            ,"*[count(//arr[@name='groups']/lst) = 3]"
+
+            ,"//arr[@name='groups']/lst[1]/str[@name='groupValue'][.='author2']"
+            ,"//arr[@name='groups']/lst[1]/result[@numFound='2']"
+            ,"//arr[@name='groups']/lst[1]/result/doc/*[@name='id'][.='4']"
+
+            ,"//arr[@name='groups']/lst[2]/str[@name='groupValue'][.='author1']"
+            ,"//arr[@name='groups']/lst[2]/result[@numFound='2']"
+            ,"//arr[@name='groups']/lst[2]/result/doc/*[@name='id'][.='2']"
+
+            ,"//arr[@name='groups']/lst[3]/str[@name='groupValue'][.='author3']"
+            ,"//arr[@name='groups']/lst[3]/result[@numFound='1']"
+            ,"//arr[@name='groups']/lst[3]/result/doc/*[@name='id'][.='5']"
+            );
+
+    assertQ(req("q","title:title", "group", "true", "group.field","group_si", "group.ngroups", "true")
+            ,"//lst[@name='grouped']/lst[@name='group_si']/int[@name='matches'][.='5']"
+            ,"//lst[@name='grouped']/lst[@name='group_si']/int[@name='ngroups'][.='2']"
+            ,"*[count(//arr[@name='groups']/lst) = 2]"
+
+            ,"//arr[@name='groups']/lst[1]/int[@name='groupValue'][.='2']"
+            ,"//arr[@name='groups']/lst[1]/result[@numFound='2']"
+            ,"//arr[@name='groups']/lst[1]/result/doc/*[@name='id'][.='4']"
+
+            ,"//arr[@name='groups']/lst[2]/int[@name='groupValue'][.='1']"
+            ,"//arr[@name='groups']/lst[2]/result[@numFound='3']"
+            ,"//arr[@name='groups']/lst[2]/result/doc/*[@name='id'][.='5']"
+            );
+  }
+
+  @Test
   public void testGroupingGroupSortingScore_basicWithGroupSortEqualToSort() {
     assertU(add(doc("id", "1","name", "author1", "title", "a book title")));
     assertU(add(doc("id", "2","name", "author1", "title", "the title")));
@@ -353,7 +397,7 @@ public class TestGroupingSearch extends 
     , "/grouped/foo_i=={'matches':10,'doclist':"
         +"{'numFound':10,'start':1,'docs':[{'id':'10'},{'id':'3'},{'id':'6'}]}}"
     );
-  };
+  }
 
 
 
@@ -476,14 +520,16 @@ public class TestGroupingSearch extends 
         List<Grp> sortedGroups = new ArrayList(groups.values());
         Collections.sort(sortedGroups,  groupComparator==sortComparator ? createFirstDocComparator(sortComparator) : createMaxDocComparator(sortComparator));
 
-        Object modelResponse = buildGroupedResult(h.getCore().getSchema(), sortedGroups, start, rows, group_offset, group_limit);
+        boolean includeNGroups = random.nextBoolean();
+        Object modelResponse = buildGroupedResult(h.getCore().getSchema(), sortedGroups, start, rows, group_offset, group_limit, includeNGroups);
 
+        int randomPercentage = random.nextInt(101);
         // TODO: create a random filter too
-
         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
+            ,(groupSortStr==null || groupSortStr==sortStr) ? "noGroupsort":"group.sort", groupSortStr==null ? "": groupSortStr
+            ,"rows",""+rows, "start",""+start, "group.offset",""+group_offset, "group.limit",""+group_limit,
+            GroupParams.GROUP_CACHE_PERCENTAGE, Integer.toString(randomPercentage), GroupParams.GROUP_TOTAL_COUNT, includeNGroups ? "true" : "false"
         );
 
         String strResponse = h.query(req);
@@ -508,7 +554,7 @@ public class TestGroupingSearch extends 
 
   }
 
-  public static Object buildGroupedResult(IndexSchema schema, List<Grp> sortedGroups, int start, int rows, int group_offset, int group_limit) {
+  public static Object buildGroupedResult(IndexSchema schema, List<Grp> sortedGroups, int start, int rows, int group_offset, int group_limit, boolean includeNGroups) {
     Map<String,Object> result = new LinkedHashMap<String,Object>();
 
     long matches = 0;
@@ -516,6 +562,9 @@ public class TestGroupingSearch extends 
       matches += grp.docs.size();
     }
     result.put("matches", matches);
+    if (includeNGroups) {
+      result.put("ngroups", sortedGroups.size());
+    }
     List groupList = new ArrayList();
     result.put("groups", groupList);
 

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java Thu Jul  7 14:18:02 2011
@@ -17,6 +17,7 @@
 
 package org.apache.solr.client.solrj;
 
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
 import org.apache.solr.client.solrj.request.CoreAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -26,6 +27,8 @@ import org.apache.solr.core.CoreContaine
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.util.ExternalPaths;
 
+import java.io.IOException;
+
 /**
  * Abstract base class for testing merge indexes command
  *
@@ -79,9 +82,9 @@ public abstract class MergeIndexesExampl
 
   protected abstract String getIndexDirCore1();
 
-  public void testMergeIndexes() throws Exception {
+  private UpdateRequest setupCores() throws SolrServerException, IOException {
     UpdateRequest up = new UpdateRequest();
-    up.setAction(ACTION.COMMIT, true, true);
+    up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);
     up.deleteByQuery("*:*");
     up.process(getSolrCore0());
     up.process(getSolrCore1());
@@ -119,11 +122,28 @@ public abstract class MergeIndexesExampl
     assertEquals(1,
         getSolrCore1().query(new SolrQuery("id:BBB")).getResults().size());
 
+    return up;
+  }
+
+  public void testMergeIndexesByDirName() throws Exception {
+    UpdateRequest up = setupCores();
+
     // Now get the index directory of core1 and merge with core0
-    String indexDir = getIndexDirCore1();
-    String name = "core0";
-    SolrServer coreadmin = getSolrAdmin();
-    CoreAdminRequest.mergeIndexes(name, new String[] { indexDir }, coreadmin);
+    CoreAdminRequest.mergeIndexes("core0", new String[] {getIndexDirCore1()}, new String[0], getSolrAdmin());
+
+    // Now commit the merged index
+    up.clear(); // just do commit
+    up.process(getSolrCore0());
+
+    assertEquals(1,
+        getSolrCore0().query(new SolrQuery("id:AAA")).getResults().size());
+    assertEquals(1,
+        getSolrCore0().query(new SolrQuery("id:BBB")).getResults().size());
+  }
+
+  public void testMergeIndexesByCoreName() throws Exception {
+    UpdateRequest up = setupCores();
+    CoreAdminRequest.mergeIndexes("core0", new String[0], new String[] {"core1"}, getSolrAdmin());
 
     // Now commit the merged index
     up.clear(); // just do commit

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java Thu Jul  7 14:18:02 2011
@@ -23,11 +23,15 @@ import org.apache.solr.client.solrj.requ
 import org.apache.solr.client.solrj.request.UpdateRequest.ACTION;
 import org.apache.solr.client.solrj.response.CoreAdminResponse;
 import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.util.ExternalPaths;
 import org.junit.Test;
 
+import java.io.File;
+
 
 /**
  *
@@ -161,5 +165,13 @@ public abstract class MultiCoreExampleTe
     }
     catch( Exception ex ) {}
     assertEquals( 1, getSolrCore("corefoo").query( new SolrQuery( "id:BBB" ) ).getResults().size() );
+
+    NamedList<Object> response = getSolrCore("corefoo").query(new SolrQuery().setQueryType("/admin/system")).getResponse();
+    NamedList<Object> coreInfo = (NamedList<Object>) response.get("core");
+    String indexDir = (String) ((NamedList<Object>) coreInfo.get("directory")).get("index");
+    // test delete index on core
+    CoreAdminRequest.unloadCore("corefoo", true, coreadmin);
+    File dir = new File(indexDir);
+    assertFalse("Index directory exists after core unload with deleteIndex=true", dir.exists());
   }
 }

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/SolrExampleTests.java Thu Jul  7 14:18:02 2011
@@ -658,15 +658,6 @@ abstract public class SolrExampleTests e
     // should be ok
     server.ping();
     
-    try {
-      SolrPing ping = new SolrPing();
-      ping.getParams().set( "qt", "unknown handler! ignore_exception" );
-      ping.process( server );
-      fail( "sent unknown query type!" );
-    }
-    catch( Exception ex ) {
-      // expected
-    }
   }
   
   @Test

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java Thu Jul  7 14:18:02 2011
@@ -27,6 +27,7 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
@@ -202,7 +203,7 @@ public class TestSolrProperties extends 
 
     mcr = CoreAdminRequest.persist("solr-persist.xml", coreadmin);
     
-    //System.out.println(IOUtils.toString(new FileInputStream(new File(solrXml.getParent(), "solr-persist.xml"))));
+    System.out.println(IOUtils.toString(new FileInputStream(new File(solrXml.getParent(), "solr-persist.xml"))));
     DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
     FileInputStream fis = new FileInputStream(new File(solrXml.getParent(), "solr-persist.xml"));
     try {

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/BasicZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/BasicZkTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/BasicZkTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/BasicZkTest.java Thu Jul  7 14:18:02 2011
@@ -17,11 +17,11 @@ package org.apache.solr.cloud;
  * limitations under the License.
  */
 
+import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.LogMergePolicy;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.update.SolrIndexWriter;
-
+import org.apache.solr.update.DirectUpdateHandler2;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -45,11 +45,10 @@ public class BasicZkTest extends Abstrac
     
     // test merge factor picked up
     SolrCore core = h.getCore();
-    SolrIndexWriter writer = new SolrIndexWriter("testWriter", core
-        .getNewIndexDir(), core.getDirectoryFactory(), false, core.getSchema(),
-        core.getSolrConfig().mainIndexConfig, core.getDeletionPolicy(), core.getCodecProvider());
+
+    IndexWriter writer = ((DirectUpdateHandler2)core.getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
+
     assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
-    writer.close();
     
     lrf.args.put(CommonParams.VERSION, "2.2");
     assertQ("test query on empty index", req("qlkciyopsbgzyvkylsjhchghjrdf"),

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java Thu Jul  7 14:18:02 2011
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
 /**
  * TODO: look at hostPort used below
  */
-public class CloudStateUpdateTest extends SolrTestCaseJ4 {
+public class CloudStateUpdateTest extends SolrTestCaseJ4  {
   protected static Logger log = LoggerFactory
       .getLogger(AbstractZkTestCase.class);
 
@@ -68,15 +68,14 @@ public class CloudStateUpdateTest extend
   
   @BeforeClass
   public static void beforeClass() throws Exception {
-    initCore();
   }
 
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    
+    createTempDir();
     System.setProperty("zkClientTimeout", "3000");
-    
+
     zkDir = dataDir.getAbsolutePath() + File.separator
         + "zookeeper/server1/data";
     zkServer = new ZkTestServer(zkDir);
@@ -95,7 +94,7 @@ public class CloudStateUpdateTest extend
     dataDir3 = new File(dataDir + File.separator + "data3");
     dataDir3.mkdirs();
     
-    dataDir4 = new File(dataDir + File.separator + "data3");
+    dataDir4 = new File(dataDir + File.separator + "data4");
     dataDir4.mkdirs();
     
     // set some system properties for use by tests
@@ -103,31 +102,21 @@ public class CloudStateUpdateTest extend
     System.setProperty("solr.test.sys.prop2", "proptwo");
     
     System.setProperty("hostPort", "1661");
-    CoreContainer.Initializer init1 = new CoreContainer.Initializer() {
-      {
-        this.dataDir = CloudStateUpdateTest.this.dataDir1.getAbsolutePath();
-      }
-    };
-    
+    CoreContainer.Initializer init1 = new CoreContainer.Initializer();
+    System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir1.getAbsolutePath());
     container1 = init1.initialize();
     System.clearProperty("hostPort");
     
     System.setProperty("hostPort", "1662");
-    init2 = new CoreContainer.Initializer() {
-      {
-        this.dataDir = CloudStateUpdateTest.this.dataDir2.getAbsolutePath();
-      }
-    };
-    
+    init2 = new CoreContainer.Initializer();
+    System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir2.getAbsolutePath());
     container2 = init2.initialize();
     System.clearProperty("hostPort");
     
     System.setProperty("hostPort", "1663");
-    CoreContainer.Initializer init3 = new CoreContainer.Initializer() {
-      {
-        this.dataDir = CloudStateUpdateTest.this.dataDir3.getAbsolutePath();
-      }
-    };
+    CoreContainer.Initializer init3 = new CoreContainer.Initializer();
+   
+    System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir3.getAbsolutePath());
     container3 = init3.initialize();
     System.clearProperty("hostPort");
     
@@ -153,6 +142,7 @@ public class CloudStateUpdateTest extend
     dcore.setDataDir(dataDir4.getAbsolutePath());
 
     SolrCore core = container1.create(dcore);
+    
     container1.register(core, false);
     
     ZkController zkController2 = container2.getZkController();
@@ -226,7 +216,8 @@ public class CloudStateUpdateTest extend
 
     assertTrue(container1.getZkController().getCloudState().liveNodesContain(
         container2.getZkController().getNodeName()));
-    
+
+    // core.close();  // this core is managed by container1 now
   }
 
   @Override

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/DummyValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/DummyValueSourceParser.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/DummyValueSourceParser.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/DummyValueSourceParser.java Thu Jul  7 14:18:02 2011
@@ -16,13 +16,13 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
+import org.apache.lucene.queries.function.DocValues;
+import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.queries.function.valuesource.SimpleFloatFunction;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.search.FunctionQParser;
 import org.apache.solr.search.ValueSourceParser;
-import org.apache.solr.search.function.DocValues;
-import org.apache.solr.search.function.SimpleFloatFunction;
-import org.apache.solr.search.function.ValueSource;
 
 
 /**

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/MockEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/MockEventListener.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/MockEventListener.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/MockEventListener.java Thu Jul  7 14:18:02 2011
@@ -40,6 +40,11 @@ public class MockEventListener implement
   public void postCommit() {
     /* NOOP */
   }
+  
+  @Override
+  public void postSoftCommit() {
+    /* NOOP */
+  }
 
   public void newSearcher(SolrIndexSearcher newSearcher, 
                           SolrIndexSearcher currentSearcher) {

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/SolrCoreTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/SolrCoreTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/SolrCoreTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/SolrCoreTest.java Thu Jul  7 14:18:02 2011
@@ -207,9 +207,13 @@ class ClosingRequestHandler extends Empt
 
   public void inform(SolrCore core) {
     core.addCloseHook( new CloseHook() {
-      public void close(SolrCore core) {
+      @Override
+      public void preClose(SolrCore core) {
         closed = true;
       }
+
+      @Override
+      public void postClose(SolrCore core) {}
     });
   }
 }

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestConfig.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestConfig.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestConfig.java Thu Jul  7 14:18:02 2011
@@ -116,22 +116,9 @@ public class TestConfig extends SolrTest
 
   @Test
   public void testTermIndexInterval() throws Exception {
-    class ExposeWriterHandler extends DirectUpdateHandler2 {
-      public ExposeWriterHandler() throws IOException {
-        super(h.getCore());
-      }
-
-      public IndexWriter getWriter() throws IOException {
-        forceOpenWriter();
-        return writer;
-      }
-    }
-
-    ExposeWriterHandler duh = new ExposeWriterHandler();
-    IndexWriter writer = duh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     int interval = writer.getConfig().getTermIndexInterval();
     assertEquals(256, interval);
-    duh.close();
   }
 
   @Test

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java Thu Jul  7 14:18:02 2011
@@ -17,8 +17,6 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
-import java.io.IOException;
-
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.LogDocMergePolicy;
 import org.apache.lucene.index.SerialMergeScheduler;
@@ -35,21 +33,9 @@ public class TestLegacyMergeSchedulerPol
 
   @Test
   public void testLegacy() throws Exception {
-    ExposeWriterHandler duh = new ExposeWriterHandler();
-    IndexWriter writer = duh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     assertTrue(writer.getConfig().getMergePolicy().getClass().getName().equals(LogDocMergePolicy.class.getName()));
     assertTrue(writer.getConfig().getMergeScheduler().getClass().getName().equals(SerialMergeScheduler.class.getName()));
-    duh.close();
   }
-  
-  class ExposeWriterHandler extends DirectUpdateHandler2 {
-    public ExposeWriterHandler() throws IOException {
-      super(h.getCore());
-    }
 
-    public IndexWriter getWriter() throws IOException {
-      forceOpenWriter();
-      return writer;
-    }
-  }
 }

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInject.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInject.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInject.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInject.java Thu Jul  7 14:18:02 2011
@@ -35,31 +35,16 @@ public class TestPropInject extends Abst
   public String getSolrConfigFile() {
     return "solrconfig-propinject.xml";
   }
-  
-  class ExposeWriterHandler extends DirectUpdateHandler2 {
-    public ExposeWriterHandler() throws IOException {
-      super(h.getCore());
-    }
-
-    public IndexWriter getWriter() throws IOException {
-      forceOpenWriter();
-      return writer;
-    }
-  }
 
   public void testMergePolicy() throws Exception {
-    ExposeWriterHandler uh = new ExposeWriterHandler();
-    IndexWriter writer = uh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     LogByteSizeMergePolicy mp = (LogByteSizeMergePolicy)writer.getConfig().getMergePolicy();
     assertEquals(64.0, mp.getMaxMergeMB(), 0);
-    uh.close();
   }
   
   public void testProps() throws Exception {
-    ExposeWriterHandler uh = new ExposeWriterHandler();
-    IndexWriter writer = uh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler)writer.getConfig().getMergeScheduler();
     assertEquals(2, cms.getMaxThreadCount());
-    uh.close();
   }
 }

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java Thu Jul  7 14:18:02 2011
@@ -17,8 +17,6 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
-import java.io.IOException;
-
 import org.apache.lucene.index.ConcurrentMergeScheduler;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.LogByteSizeMergePolicy;
@@ -32,34 +30,19 @@ public class TestPropInjectDefaults exte
   public static void beforeClass() throws Exception {
     initCore("solrconfig-propinject-indexdefault.xml", "schema.xml");
   }
-  
-  class ExposeWriterHandler extends DirectUpdateHandler2 {
-    public ExposeWriterHandler() throws IOException {
-      super(h.getCore());
-    }
-
-    public IndexWriter getWriter() throws IOException {
-      forceOpenWriter();
-      return writer;
-    }
-  }
 
   @Test
   public void testMergePolicyDefaults() throws Exception {
-    ExposeWriterHandler uh = new ExposeWriterHandler();
-    IndexWriter writer = uh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     LogByteSizeMergePolicy mp = (LogByteSizeMergePolicy)writer.getConfig().getMergePolicy();
     assertEquals(32.0, mp.getMaxMergeMB(), 0);
-    uh.close();
   }
   
   @Test
   public void testPropsDefaults() throws Exception {
-    ExposeWriterHandler uh = new ExposeWriterHandler();
-    IndexWriter writer = uh.getWriter();
+    IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
     ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler)writer.getConfig().getMergeScheduler();
     assertEquals(4, cms.getMaxThreadCount());
-    uh.close();
   }
 
 }

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java Thu Jul  7 14:18:02 2011
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.noggit.JSONParser;
-import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.SolrInputField;
@@ -70,7 +69,7 @@ public class JsonLoaderTest extends Solr
       "},\n" +
       "\n" +
       "'commit': {},\n" +
-      "'optimize': { 'waitFlush':false, 'waitSearcher':false },\n" +
+      "'optimize': { 'waitSearcher':false },\n" +
       "\n" +
       "'delete': { 'id':'ID' },\n" +
       "'delete': { 'query':'QUERY' },\n" +
@@ -109,12 +108,10 @@ public class JsonLoaderTest extends Solr
     assertEquals( 2, p.commitCommands.size() );
     CommitUpdateCommand commit = p.commitCommands.get( 0 );
     assertFalse( commit.optimize );
-    assertTrue( commit.waitFlush );
     assertTrue( commit.waitSearcher );
     
     commit = p.commitCommands.get( 1 );
     assertTrue( commit.optimize );
-    assertFalse( commit.waitFlush );
     assertFalse( commit.waitSearcher );
     
 

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/handler/component/TermVectorComponentTest.java Thu Jul  7 14:18:02 2011
@@ -135,7 +135,39 @@ public class TermVectorComponentTest ext
     assertJQ(req("json.nl","map", "qt",tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, "true"
        , TermVectorParams.TF, "true", TermVectorParams.DF, "true", TermVectorParams.OFFSETS, "true", TermVectorParams.POSITIONS, "true", TermVectorParams.TF_IDF, "true")
        ,"/termVectors/doc-0/test_posofftv/anoth=={'tf':1, 'offsets':{'start':20, 'end':27}, 'positions':{'position':1}, 'df':2, 'tf-idf':0.5}"
-    );    
+    );
+    
+    assertJQ(req("json.nl","map", "qt",tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, "true"
+        , TermVectorParams.ALL, "true")
+        ,"/termVectors/doc-0/test_posofftv/anoth=={'tf':1, 'offsets':{'start':20, 'end':27}, 'positions':{'position':1}, 'df':2, 'tf-idf':0.5}"
+     );
+    
+    // test each combination at random
+    final List<String> list = new ArrayList<String>();
+    list.addAll(Arrays.asList("json.nl","map", "qt",tv, "q", "id:0", TermVectorComponent.COMPONENT_NAME, "true"));
+    String[][] options = new String[][] { { TermVectorParams.TF, "'tf':1" },
+        { TermVectorParams.OFFSETS, "'offsets':{'start':20, 'end':27}" },
+        { TermVectorParams.POSITIONS, "'positions':{'position':1}" },
+        { TermVectorParams.DF, "'df':2" },
+        { TermVectorParams.TF_IDF, "'tf-idf':0.5" } };
+    StringBuilder expected = new StringBuilder("/termVectors/doc-0/test_posofftv/anoth=={");
+    boolean first = true;
+    for (int i = 0; i < options.length; i++) {
+      final boolean use = random.nextBoolean();
+      if (use) {
+        if (!first) {
+          expected.append(", ");
+        }
+        first = false;
+        expected.append(options[i][1]);
+        
+      }
+      list.add(options[i][0]);
+      list.add(use ? "true" : "false");
+    }
+    
+    expected.append("}");
+    assertJQ(req(list.toArray(new String[0])), expected.toString());
   }
 
   @Test

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/request/TestFaceting.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/request/TestFaceting.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/request/TestFaceting.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/request/TestFaceting.java Thu Jul  7 14:18:02 2011
@@ -87,7 +87,7 @@ public class TestFaceting extends SolrTe
       if (te == null) {
         br = null;
       } else {
-        TermsEnum.SeekStatus status = te.seek(new BytesRef(s));
+        TermsEnum.SeekStatus status = te.seekCeil(new BytesRef(s));
         if (status == TermsEnum.SeekStatus.END) {
           br = null;
         } else {
@@ -103,7 +103,7 @@ public class TestFaceting extends SolrTe
 
     // test seeking before term
     if (size>0) {
-      assertEquals(size>0, te.seek(new BytesRef("000"), true) != TermsEnum.SeekStatus.END);
+      assertEquals(size>0, te.seekCeil(new BytesRef("000"), true) != TermsEnum.SeekStatus.END);
       assertEquals(0, te.ord());
       assertEquals(t(0), te.term().utf8ToString());
     }
@@ -113,7 +113,7 @@ public class TestFaceting extends SolrTe
       for (int i=0; i<size*2+10; i++) {
         int rnum = r.nextInt(size);
         String s = t(rnum);
-        assertTrue(te.seek((long) rnum) != TermsEnum.SeekStatus.END);
+        te.seekExact((long) rnum);
         BytesRef br = te.term();
         assertNotNull(br);
         assertEquals(rnum, (int) te.ord());

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/schema/PolyFieldTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/schema/PolyFieldTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/schema/PolyFieldTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/schema/PolyFieldTest.java Thu Jul  7 14:18:02 2011
@@ -17,13 +17,13 @@ package org.apache.solr.schema;
  */
 
 import org.apache.lucene.document.Fieldable;
+import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.Query;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.search.function.ValueSource;
 import org.junit.BeforeClass;
 import org.junit.Test;
 

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/QueryParsingTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/QueryParsingTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/QueryParsingTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/QueryParsingTest.java Thu Jul  7 14:18:02 2011
@@ -46,57 +46,57 @@ public class QueryParsingTest extends So
 
     sort = QueryParsing.parseSort("score asc", req);
     SortField[] flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.SCORE);
+    assertEquals(flds[0].getType(), SortField.Type.SCORE);
     assertTrue(flds[0].getReverse());
 
     sort = QueryParsing.parseSort("weight desc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
     assertEquals(flds[0].getReverse(), true);
     sort = QueryParsing.parseSort("weight desc,bday asc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
     assertEquals(flds[0].getReverse(), true);
-    assertEquals(flds[1].getType(), SortField.LONG);
+    assertEquals(flds[1].getType(), SortField.Type.LONG);
     assertEquals(flds[1].getField(), "bday");
     assertEquals(flds[1].getReverse(), false);
     //order aliases
     sort = QueryParsing.parseSort("weight top,bday asc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
     assertEquals(flds[0].getReverse(), true);
-    assertEquals(flds[1].getType(), SortField.LONG);
+    assertEquals(flds[1].getType(), SortField.Type.LONG);
     assertEquals(flds[1].getField(), "bday");
     assertEquals(flds[1].getReverse(), false);
     sort = QueryParsing.parseSort("weight top,bday bottom", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
     assertEquals(flds[0].getReverse(), true);
-    assertEquals(flds[1].getType(), SortField.LONG);
+    assertEquals(flds[1].getType(), SortField.Type.LONG);
     assertEquals(flds[1].getField(), "bday");
     assertEquals(flds[1].getReverse(), false);
 
     //test weird spacing
     sort = QueryParsing.parseSort("weight         desc,            bday         asc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
     assertEquals(flds[1].getField(), "bday");
-    assertEquals(flds[1].getType(), SortField.LONG);
+    assertEquals(flds[1].getType(), SortField.Type.LONG);
     //handles trailing commas
     sort = QueryParsing.parseSort("weight desc,", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
 
     //test functions
     sort = QueryParsing.parseSort("pow(weight, 2) desc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.CUSTOM);
+    assertEquals(flds[0].getType(), SortField.Type.REWRITEABLE);
     //Not thrilled about the fragility of string matching here, but...
     //the value sources get wrapped, so the out field is different than the input
     assertEquals(flds[0].getField(), "pow(float(weight),const(2))");
@@ -104,12 +104,12 @@ public class QueryParsingTest extends So
     //test functions (more deep)
     sort = QueryParsing.parseSort("sum(product(r_f1,sum(d_f1,t_f1,1.0)),a_f1) asc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.CUSTOM);
+    assertEquals(flds[0].getType(), SortField.Type.REWRITEABLE);
     assertEquals(flds[0].getField(), "sum(product(float(r_f1),sum(float(d_f1),float(t_f1),const(1.0))),float(a_f1))");
 
     sort = QueryParsing.parseSort("pow(weight,                 2.0)         desc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.CUSTOM);
+    assertEquals(flds[0].getType(), SortField.Type.REWRITEABLE);
     //Not thrilled about the fragility of string matching here, but...
     //the value sources get wrapped, so the out field is different than the input
     assertEquals(flds[0].getField(), "pow(float(weight),const(2.0))");
@@ -117,27 +117,27 @@ public class QueryParsingTest extends So
 
     sort = QueryParsing.parseSort("pow(weight, 2.0) desc, weight    desc,   bday    asc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.CUSTOM);
+    assertEquals(flds[0].getType(), SortField.Type.REWRITEABLE);
 
     //Not thrilled about the fragility of string matching here, but...
     //the value sources get wrapped, so the out field is different than the input
     assertEquals(flds[0].getField(), "pow(float(weight),const(2.0))");
 
-    assertEquals(flds[1].getType(), SortField.FLOAT);
+    assertEquals(flds[1].getType(), SortField.Type.FLOAT);
     assertEquals(flds[1].getField(), "weight");
     assertEquals(flds[2].getField(), "bday");
-    assertEquals(flds[2].getType(), SortField.LONG);
+    assertEquals(flds[2].getType(), SortField.Type.LONG);
     
     //handles trailing commas
     sort = QueryParsing.parseSort("weight desc,", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.FLOAT);
+    assertEquals(flds[0].getType(), SortField.Type.FLOAT);
     assertEquals(flds[0].getField(), "weight");
 
     //Test literals in functions
     sort = QueryParsing.parseSort("strdist(foo_s1, \"junk\", jw) desc", req);
     flds = sort.getSort();
-    assertEquals(flds[0].getType(), SortField.CUSTOM);
+    assertEquals(flds[0].getType(), SortField.Type.REWRITEABLE);
     //the value sources get wrapped, so the out field is different than the input
     assertEquals(flds[0].getField(), "strdist(str(foo_s1),literal(junk), dist=org.apache.lucene.search.spell.JaroWinklerDistance)");
 

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestIndexSearcher.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestIndexSearcher.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestIndexSearcher.java Thu Jul  7 14:18:02 2011
@@ -18,12 +18,12 @@ package org.apache.solr.search;
 
 import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.index.IndexReader.ReaderContext;
+import org.apache.lucene.queries.function.DocValues;
+import org.apache.lucene.queries.function.ValueSource;
 import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.schema.SchemaField;
-import org.apache.solr.search.function.ValueSource;
-import org.apache.solr.search.function.DocValues;
 import org.junit.BeforeClass;
 
 import java.util.Map;

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestQueryTypes.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestQueryTypes.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestQueryTypes.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestQueryTypes.java Thu Jul  7 14:18:02 2011
@@ -120,6 +120,16 @@ public class TestQueryTypes extends Abst
               ,"//result[@numFound='1']"
               );
 
+       // frange as filter not cached
+      assertQ(req( "q","*:*", "fq", "{!frange cache=false v="+f+" l='"+v+"' u='"+v+"'}" )
+              ,"//result[@numFound='1']"
+              );
+
+       // frange as filter run after the main query
+      assertQ(req( "q","*:*", "fq", "{!frange cache=false cost=100 v="+f+" l='"+v+"' u='"+v+"'}" )
+              ,"//result[@numFound='1']"
+              );
+
       // exists()
       assertQ(req( "fq","id:999", "q", "{!frange l=1 u=1}if(exists("+f+"),1,0)" )
               ,"//result[@numFound='1']"

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSearchPerf.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSearchPerf.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSearchPerf.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSearchPerf.java Thu Jul  7 14:18:02 2011
@@ -202,10 +202,10 @@ public class TestSearchPerf extends Abst
 
     SolrQueryRequest req = lrf.makeRequest();
     QParser parser = QParser.getParser("foomany_s:[" + l + " TO " + u + "]", null, req);
-    Query range = parser.parse();
+    Query range = parser.getQuery();
                                      
     QParser parser2 = QParser.getParser("{!frange l="+l+" u="+u+"}foomany_s", null, req);
-    Query frange = parser2.parse();
+    Query frange = parser2.getQuery();
     req.close();
 
     createIndex2(indexSize,"foomany_s");
@@ -228,13 +228,13 @@ public class TestSearchPerf extends Abst
     SolrQueryRequest req = lrf.makeRequest();
 
     QParser parser = QParser.getParser("foomany_s:[" + l + " TO " + u + "]", null, req);
-    Query rangeQ = parser.parse();
+    Query rangeQ = parser.getQuery();
     List<Query> filters = new ArrayList<Query>();
     filters.add(rangeQ);
     req.close();
 
     parser = QParser.getParser("{!dismax qf=t10_100_ws pf=t10_100_ws ps=20}"+ t(0) + ' ' + t(1) + ' ' + t(2), null, req);
-    Query q= parser.parse();
+    Query q= parser.getQuery();
 
     // SolrIndexSearcher searcher = req.getSearcher();
     // DocSet range = searcher.getDocSet(rangeQ, null);

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSort.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSort.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/TestSort.java Thu Jul  7 14:18:02 2011
@@ -126,13 +126,13 @@ public class TestSort extends AbstractSo
         final boolean sortMissingFirst2 = !luceneSort2 && !sortMissingLast2;
         final boolean reverse2 = r.nextBoolean();
 
-        if (r.nextBoolean()) sfields.add( new SortField(null, SortField.SCORE));
+        if (r.nextBoolean()) sfields.add( new SortField(null, SortField.Type.SCORE));
         // hit both use-cases of sort-missing-last
         sfields.add( Sorting.getStringSortField("f", reverse, sortMissingLast, sortMissingFirst) );
         if (secondary) {
           sfields.add( Sorting.getStringSortField("f2", reverse2, sortMissingLast2, sortMissingFirst2) );
         }
-        if (r.nextBoolean()) sfields.add( new SortField(null, SortField.SCORE));
+        if (r.nextBoolean()) sfields.add( new SortField(null, SortField.Type.SCORE));
 
         Sort sort = new Sort(sfields.toArray(new SortField[sfields.size()]));
 

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/NvlValueSourceParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/NvlValueSourceParser.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/NvlValueSourceParser.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/NvlValueSourceParser.java Thu Jul  7 14:18:02 2011
@@ -17,6 +17,9 @@
 
 package org.apache.solr.search.function;
 
+import org.apache.lucene.queries.function.DocValues;
+import org.apache.lucene.queries.function.ValueSource;
+import org.apache.lucene.queries.function.valuesource.SimpleFloatFunction;
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.search.FunctionQParser;

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/search/function/TestFunctionQuery.java Thu Jul  7 14:18:02 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.FieldInvertState;
+import org.apache.lucene.index.codecs.CodecProvider;
 import org.apache.lucene.search.DefaultSimilarity;
 import org.apache.lucene.search.FieldCache;
 import org.apache.lucene.search.TFIDFSimilarity;
@@ -65,11 +66,25 @@ public class TestFunctionQuery extends S
     // lrf.args.put("version","2.0");
     for (float val : values) {
       String s = Float.toString(val);
+
       if (field!=null) assertU(adoc("id", s, field, s));
       else assertU(adoc("id", s));
+
+      if (random.nextInt(100) < 20) {
+        if (field!=null) assertU(adoc("id", s, field, s));
+        else assertU(adoc("id", s));
+      }
+
+      if (random.nextInt(100) < 20) {
+        assertU(commit());
+
+      }
+
+
       // System.out.println("added doc for " + val);
     }
-    assertU(optimize()); // squeeze out any possible deleted docs
+    // assertU(optimize()); // squeeze out any possible deleted docs
+    assertU(commit());
   }
 
   // replace \0 with the field name and create a parseable string 
@@ -289,7 +304,17 @@ public class TestFunctionQuery extends S
     assertQ(req("fl","*,score","q", "{!func}docfreq('a_t','cow')", "fq","id:6"), "//float[@name='score']='3.0'");
     assertQ(req("fl","*,score","q", "{!func}docfreq($field,$value)", "fq","id:6", "field","a_t", "value","cow"), "//float[@name='score']='3.0'");
     assertQ(req("fl","*,score","q", "{!func}termfreq(a_t,cow)", "fq","id:6"), "//float[@name='score']='5.0'");
+
     TFIDFSimilarity similarity = new DefaultSimilarity();
+
+    // make sure it doesn't get a NPE if no terms are present in a field.
+    assertQ(req("fl","*,score","q", "{!func}termfreq(nofield_t,cow)", "fq","id:6"), "//float[@name='score']='0.0'");
+    assertQ(req("fl","*,score","q", "{!func}docfreq(nofield_t,cow)", "fq","id:6"), "//float[@name='score']='0.0'");
+    assertQ(req("fl","*,score","q", "{!func}idf(nofield_t,cow)", "fq","id:6"),
+        "//float[@name='score']='" + similarity.idf(0,6)  + "'");
+     assertQ(req("fl","*,score","q", "{!func}tf(nofield_t,cow)", "fq","id:6"),
+        "//float[@name='score']='" + similarity.tf(0)  + "'");
+
     assertQ(req("fl","*,score","q", "{!func}idf(a_t,cow)", "fq","id:6"),
         "//float[@name='score']='" + similarity.idf(3,6)  + "'");
     assertQ(req("fl","*,score","q", "{!func}tf(a_t,cow)", "fq","id:6"),
@@ -371,6 +396,30 @@ public class TestFunctionQuery extends S
     purgeFieldCache(FieldCache.DEFAULT);   // avoid FC insanity
   }
 
+  /**
+   * test collection-level term stats (new in 4.x indexes)
+   */
+  public void testTotalTermFreq() throws Exception {
+    assumeFalse("PreFlex codec does not support collection-level term stats", 
+        "PreFlex".equals(CodecProvider.getDefault().getDefaultFieldCodec()));
+    
+    clearIndex();
+    
+    assertU(adoc("id","1", "a_tdt","2009-08-31T12:10:10.123Z", "b_tdt","2009-08-31T12:10:10.124Z"));
+    assertU(adoc("id","2", "a_t","how now brown cow"));
+    assertU(commit()); // create more than one segment
+    assertU(adoc("id","3", "a_t","brown cow"));
+    assertU(adoc("id","4"));
+    assertU(commit()); // create more than one segment
+    assertU(adoc("id","5"));
+    assertU(adoc("id","6", "a_t","cow cow cow cow cow"));
+    assertU(commit());
+    assertQ(req("fl","*,score","q", "{!func}totaltermfreq('a_t','cow')", "fq","id:6"), "//float[@name='score']='7.0'");    
+    assertQ(req("fl","*,score","q", "{!func}ttf(a_t,'cow')", "fq","id:6"), "//float[@name='score']='7.0'");
+    assertQ(req("fl","*,score","q", "{!func}sumtotaltermfreq('a_t')", "fq","id:6"), "//float[@name='score']='11.0'");
+    assertQ(req("fl","*,score","q", "{!func}sttf(a_t)", "fq","id:6"), "//float[@name='score']='11.0'");
+  }
+
   @Test
   public void testSortByFunc() throws Exception {
     assertU(adoc("id", "1", "const_s", "xx", "x_i", "100", "1_s", "a"));

Modified: lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/update/AutoCommitTest.java?rev=1143840&r1=1143839&r2=1143840&view=diff
==============================================================================
--- lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/dev/branches/flexscoring/solr/src/test/org/apache/solr/update/AutoCommitTest.java Thu Jul  7 14:18:02 2011
@@ -25,52 +25,47 @@ import org.apache.solr.common.params.Map
 import org.apache.solr.common.util.ContentStream;
 import org.apache.solr.common.util.ContentStreamBase;
 import org.apache.solr.common.util.NamedList;
-import org.apache.solr.core.*;
-import org.apache.solr.search.*;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrEventListener;
 import org.apache.solr.handler.XmlUpdateRequestHandler;
 import org.apache.solr.request.SolrQueryRequestBase;
 import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.AbstractSolrTestCase;
-import org.apache.solr.util.RefCounted;
-
-class CommitListener implements SolrEventListener {
-  public volatile boolean triggered = false;
-  public volatile SolrIndexSearcher currentSearcher;
-  public SolrCore core;
-
-  public CommitListener(SolrCore core) {
-    this.core = core;
-  }
 
+class NewSearcherListener implements SolrEventListener {
+  private volatile boolean triggered = false;
+  
+  @Override
   public void init(NamedList args) {}
-
-  public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
-    this.currentSearcher = currentSearcher;
-    triggered = true;
-  }
-  public void postCommit() {
+  
+  @Override
+  public void newSearcher(SolrIndexSearcher newSearcher,
+      SolrIndexSearcher currentSearcher) {
     triggered = true;
   }
+  
+  @Override
+  public void postCommit() {}
+  
+  @Override
+  public void postSoftCommit() {}
+  
   public void reset() {
-    triggered=false;
+    triggered = false;
   }
-
-  public boolean waitForCommit(int timeout) {
-    //triggered = false;
-    
-    for (int towait=timeout; towait > 0; towait -= 250) {
+  
+  boolean waitForNewSearcher(int timeout) {
+    long timeoutTime = System.currentTimeMillis() + timeout;
+    while (System.currentTimeMillis() < timeoutTime) {
+      if (triggered) {
+        return true;
+      }
+      
       try {
-        if (triggered) {
-          RefCounted<SolrIndexSearcher> holder = core.getSearcher();
-          SolrIndexSearcher s = holder.get();
-          holder.decref();
-          // since there could be two commits in a row, don't test for a specific new searcher
-          // just test that the old one has been replaced.
-          if (s != currentSearcher) return true;
-          // it may be that a commit just happened, but the new searcher hasn't been registered yet.
-        }
-        Thread.sleep( 250 );
+        Thread.sleep(250);
       } catch (InterruptedException e) {}
+      
     }
     return false;
   }
@@ -97,61 +92,60 @@ public class AutoCommitTest extends Abst
     return streams;
   }
 
-  /* This test is causing too many failures on one of the build slaves.
-     Temporarily disabled. -Mike Klaas */
-  public void XXXtestMaxDocs() throws Exception {
+  public void testMaxDocs() throws Exception {
 
     SolrCore core = h.getCore();
-    CommitListener trigger = new CommitListener(core);
+    NewSearcherListener trigger = new NewSearcherListener();
 
-    DirectUpdateHandler2 updater = (DirectUpdateHandler2)core.getUpdateHandler();
-    DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
-    tracker.timeUpperBound = 100000;
+    DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
+    CommitTracker tracker = updateHandler.commitTracker;
+    tracker.timeUpperBound = -1;
     tracker.docsUpperBound = 14;
-    // updater.commitCallbacks.add(trigger);
+    core.registerNewSearcherListener(trigger);
+  
     
     XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
     handler.init( null );
     
     MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
     
-    // Add a single document
+    // Add documents
     SolrQueryResponse rsp = new SolrQueryResponse();
     SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
     for( int i=0; i<14; i++ ) {
       req.setContentStreams( toContentStreams(
-        adoc("id", "A"+i, "subject", "info" ), null ) );
+        adoc("id", Integer.toString(i), "subject", "info" ), null ) );
       handler.handleRequest( req, rsp );
     }
     // It should not be there right away
-    assertQ("shouldn't find any", req("id:A1") ,"//result[@numFound=0]" );
+    assertQ("shouldn't find any", req("id:1") ,"//result[@numFound=0]" );
     assertEquals( 0, tracker.getCommitCount());
 
     req.setContentStreams( toContentStreams(
-        adoc("id", "A14", "subject", "info" ), null ) );
+        adoc("id", "14", "subject", "info" ), null ) );
     handler.handleRequest( req, rsp );
-    // Wait longer than the autocommit time
-    assertTrue(trigger.waitForCommit(20000));
+
+    assertTrue(trigger.waitForNewSearcher(10000));
 
     req.setContentStreams( toContentStreams(
-        adoc("id", "A15", "subject", "info" ), null ) );
+        adoc("id", "15", "subject", "info" ), null ) );
     handler.handleRequest( req, rsp );
       
     // Now make sure we can find it
-    assertQ("should find one", req("id:A14") ,"//result[@numFound=1]" );
+    assertQ("should find one", req("id:14") ,"//result[@numFound=1]" );
     assertEquals( 1, tracker.getCommitCount());
     // But not the one added afterward
-    assertQ("should not find one", req("id:A15") ,"//result[@numFound=0]" );
+    assertQ("should not find one", req("id:15") ,"//result[@numFound=0]" );
     assertEquals( 1, tracker.getCommitCount());
     
   }
 
   public void testMaxTime() throws Exception {
     SolrCore core = h.getCore();
-    CommitListener trigger = new CommitListener(core);    
+    NewSearcherListener trigger = new NewSearcherListener();    
     core.registerNewSearcherListener(trigger);
     DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
-    DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
+    CommitTracker tracker = updater.commitTracker;
     // too low of a number can cause a slow host to commit before the test code checks that it
     // isn't there... causing a failure at "shouldn't find any"
     tracker.timeUpperBound = 1000;
@@ -175,7 +169,7 @@ public class AutoCommitTest extends Abst
     assertQ("shouldn't find any", req("id:529") ,"//result[@numFound=0]" );
 
     // Wait longer than the autocommit time
-    assertTrue(trigger.waitForCommit(30000));
+    assertTrue(trigger.waitForNewSearcher(30000));
     trigger.reset();
     req.setContentStreams( toContentStreams(
       adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null ) );
@@ -190,7 +184,7 @@ public class AutoCommitTest extends Abst
     assertU( delI("529") );
     assertQ("deleted, but should still be there", req("id:529") ,"//result[@numFound=1]" );
     // Wait longer than the autocommit time
-    assertTrue(trigger.waitForCommit(30000));
+    assertTrue(trigger.waitForNewSearcher(30000));
     trigger.reset();
     req.setContentStreams( toContentStreams(
       adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null ) );
@@ -208,7 +202,7 @@ public class AutoCommitTest extends Abst
     assertQ("should not be there yet", req("id:500") ,"//result[@numFound=0]" );
     
     // Wait longer than the autocommit time
-    assertTrue(trigger.waitForCommit(45000));
+    assertTrue(trigger.waitForNewSearcher(45000));
     trigger.reset();
     
     req.setContentStreams( toContentStreams(
@@ -220,4 +214,152 @@ public class AutoCommitTest extends Abst
     assertQ("but not this", req("id:531") ,"//result[@numFound=0]" );
   }
 
+  public void testSoftCommitMaxDocs() throws Exception {
+
+    SolrCore core = h.getCore();
+    NewSearcherListener trigger = new NewSearcherListener();
+
+    DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
+    CommitTracker tracker = updateHandler.commitTracker;
+    tracker.timeUpperBound = -1;
+    tracker.docsUpperBound = 8;
+ 
+    
+    NewSearcherListener softTrigger = new NewSearcherListener();
+
+    CommitTracker softTracker = updateHandler.softCommitTracker;
+    softTracker.timeUpperBound = -1;
+    softTracker.docsUpperBound = 4;
+    core.registerNewSearcherListener(softTrigger);
+    
+    XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
+    handler.init( null );
+    
+    MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
+    
+    // Add documents
+    SolrQueryResponse rsp = new SolrQueryResponse();
+    SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
+    for( int i=0; i<4; i++ ) {
+      req.setContentStreams( toContentStreams(
+        adoc("id", Integer.toString(i), "subject", "info" ), null ) );
+      handler.handleRequest( req, rsp );
+    }
+    // It should not be there right away
+    assertQ("shouldn't find any", req("id:1") ,"//result[@numFound=0]" );
+    assertEquals( 0, tracker.getCommitCount());
+
+    req.setContentStreams( toContentStreams(
+        adoc("id", "4", "subject", "info" ), null ) );
+    handler.handleRequest( req, rsp );
+
+    assertTrue(softTrigger.waitForNewSearcher(10000));
+    
+    core.registerNewSearcherListener(trigger);
+    
+    assertQ("should find 5", req("*:*") ,"//result[@numFound=5]" );
+    assertEquals( 1, softTracker.getCommitCount());
+    assertEquals( 0, tracker.getCommitCount());
+    
+    req.setContentStreams( toContentStreams(
+        adoc("id", "5", "subject", "info" ), null ) );
+    handler.handleRequest( req, rsp );
+      
+    // Now make sure we can find it
+    assertQ("should find one", req("id:4") ,"//result[@numFound=1]" );
+    assertEquals( 1, softTracker.getCommitCount());
+    // But not the one added afterward
+    assertQ("should not find one", req("id:5") ,"//result[@numFound=0]" );
+    assertEquals( 1, softTracker.getCommitCount());
+    
+    for( int i=6; i<10; i++ ) {
+      req.setContentStreams( toContentStreams(
+        adoc("id", Integer.toString(i), "subject", "info" ), null ) );
+      handler.handleRequest( req, rsp );
+    }
+    req.close();
+    
+    
+    assertTrue(trigger.waitForNewSearcher(10000));
+    assertQ("should find 10", req("*:*") ,"//result[@numFound=10]" );
+    assertEquals( 1, softTracker.getCommitCount());
+    assertEquals( 1, tracker.getCommitCount());
+  }
+  
+  public void testSoftCommitMaxTime() throws Exception {
+    SolrCore core = h.getCore();
+    NewSearcherListener trigger = new NewSearcherListener();    
+    core.registerNewSearcherListener(trigger);
+    DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
+    CommitTracker tracker = updater.commitTracker;
+    CommitTracker softTracker = updater.softCommitTracker;
+    
+    // too low of a number can cause a slow host to commit before the test code checks that it
+    // isn't there... causing a failure at "shouldn't find any"
+    softTracker.timeUpperBound = 2000;
+    softTracker.docsUpperBound = -1;
+    // updater.commitCallbacks.add(trigger);
+    
+    XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
+    handler.init( null );
+    
+    MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
+    
+    // Add a single document
+    SolrQueryResponse rsp = new SolrQueryResponse();
+    SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
+    req.setContentStreams( toContentStreams(
+      adoc("id", "529", "field_t", "what's inside?", "subject", "info"), null ) );
+    trigger.reset();
+    handler.handleRequest( req, rsp );
+
+    // Check it it is in the index
+    assertQ("shouldn't find any", req("id:529") ,"//result[@numFound=0]" );
+
+    // Wait longer than the autocommit time
+    assertTrue(trigger.waitForNewSearcher(30000));
+    trigger.reset();
+    req.setContentStreams( toContentStreams(
+      adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null ) );
+    handler.handleRequest( req, rsp );
+      
+    // Now make sure we can find it
+    assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
+    // But not this one
+    assertQ("should find none", req("id:530") ,"//result[@numFound=0]" );
+    
+    // Delete the document
+    assertU( delI("529") );
+    assertQ("deleted, but should still be there", req("id:529") ,"//result[@numFound=1]" );
+    // Wait longer than the autocommit time
+    assertTrue(trigger.waitForNewSearcher(15000));
+    trigger.reset();
+    req.setContentStreams( toContentStreams(
+      adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null ) );
+    handler.handleRequest( req, rsp );
+    assertEquals( 2, softTracker.getCommitCount() );
+    assertQ("deleted and time has passed", req("id:529") ,"//result[@numFound=0]" );
+    
+    // now make the call 5 times really fast and make sure it 
+    // only commits once
+    req.setContentStreams( toContentStreams(
+        adoc("id", "500" ), null ) );
+    for( int i=0;i<5; i++ ) {
+      handler.handleRequest( req, rsp );
+    }
+    assertQ("should not be there yet", req("id:500") ,"//result[@numFound=0]" );
+    
+    // Wait longer than the autocommit time
+    assertTrue(trigger.waitForNewSearcher(15000));
+    trigger.reset();
+    
+    req.setContentStreams( toContentStreams(
+      adoc("id", "531", "field_t", "what's inside?", "subject", "info"), null ) );
+    handler.handleRequest( req, rsp );
+    assertEquals( 3, softTracker.getCommitCount() );
+    assertEquals( 0, tracker.getCommitCount() );
+    
+    assertQ("now it should", req("id:500") ,"//result[@numFound=1]" );
+    assertQ("but not this", req("id:531") ,"//result[@numFound=0]" );
+  }
 }