You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2011/02/09 10:36:03 UTC

svn commit: r1068809 [32/36] - in /lucene/dev/branches/docvalues: ./ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/idea/.idea/copyright/ dev-tools/idea/lucene/ dev-tools/idea/lucene/contrib/ant/ dev-tools/idea/lucene/contrib/queryparser/ dev-tools...

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.java Wed Feb  9 09:35:27 2011
@@ -173,12 +173,20 @@ public class StreamingUpdateSolrServer e
       }
       catch (Throwable e) {
         handleError( e );
-      } 
+      }
       finally {
-        // remove it from the list of running things...
+
+        // remove it from the list of running things unless we are the last runner and the queue is full...
+        // in which case, the next queue.put() would block and there would be no runners to handle it.
         synchronized (runners) {
-          runners.remove( this );
+          if (runners.size() == 1 && queue.remainingCapacity() == 0) {
+           // keep this runner alive
+           scheduler.execute(this);
+          } else {
+            runners.remove( this );
+          }
         }
+
         log.info( "finished: {}" , this );
         runnerLock.unlock();
       }
@@ -208,7 +216,7 @@ public class StreamingUpdateSolrServer e
         return super.request( request );
       }
     }
-    
+
     try {
       CountDownLatch tmpLock = lock;
       if( tmpLock != null ) {
@@ -216,18 +224,18 @@ public class StreamingUpdateSolrServer e
       }
 
       queue.put( req );
-      
-        synchronized( runners ) {
-      if( runners.isEmpty() 
-        || (queue.remainingCapacity() < queue.size() 
-         && runners.size() < threadCount) ) 
-      {
+
+      synchronized( runners ) {
+        if( runners.isEmpty()
+                || (queue.remainingCapacity() < queue.size()
+                && runners.size() < threadCount) )
+        {
           Runner r = new Runner();
           scheduler.execute( r );
           runners.add( r );
         }
       }
-    } 
+    }
     catch (InterruptedException e) {
       log.error( "interrupted", e );
       throw new IOException( e.getLocalizedMessage() );

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java Wed Feb  9 09:35:27 2011
@@ -67,6 +67,7 @@ public class JavaBinUpdateRequestCodec {
     nl.add("delByQ", updateRequest.getDeleteQuery());
     nl.add("docs", docIter);
     new JavaBinCodec(){
+      @Override
       public void writeMap(Map val) throws IOException {
         if (val instanceof SolrInputDocument) {
           writeVal(solrInputDocumentToList((SolrInputDocument) val));
@@ -101,6 +102,7 @@ public class JavaBinUpdateRequestCodec {
       // is ever refactored, this will not work.
       private boolean seenOuterMostDocIterator = false;
         
+      @Override
       public NamedList readNamedList(FastInputStream dis) throws IOException {
         int sz = readSize(dis);
         NamedList nl = new NamedList();
@@ -115,6 +117,7 @@ public class JavaBinUpdateRequestCodec {
         return nl;
       }
 
+      @Override
       public List readIterator(FastInputStream fis) throws IOException {
 
         // default behavior for reading any regular Iterator in the stream

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/AnalysisResponseBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/AnalysisResponseBase.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/AnalysisResponseBase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/AnalysisResponseBase.java Wed Feb  9 09:35:27 2011
@@ -62,12 +62,12 @@ public class AnalysisResponseBase extend
    *
    * @return The built analysis phases list.
    */
-  protected List<AnalysisPhase> buildPhases(NamedList<Object> phaseNL) {
+  protected List<AnalysisPhase> buildPhases(NamedList<List<NamedList<Object>>> phaseNL) {
     List<AnalysisPhase> phases = new ArrayList<AnalysisPhase>(phaseNL.size());
-    for (Map.Entry<String, Object> phaseEntry : phaseNL) {
+    for (Map.Entry<String, List<NamedList<Object>>> phaseEntry : phaseNL) {
       AnalysisPhase phase = new AnalysisPhase(phaseEntry.getKey());
-      List<NamedList> tokens = (List<NamedList>) phaseEntry.getValue();
-      for (NamedList token : tokens) {
+      List<NamedList<Object>> tokens = phaseEntry.getValue();
+      for (NamedList<Object> token : tokens) {
         TokenInfo tokenInfo = buildTokenInfo(token);
         phase.addTokenInfo(tokenInfo);
       }
@@ -95,7 +95,7 @@ public class AnalysisResponseBase extend
    *
    * @return The built token info.
    */
-  protected TokenInfo buildTokenInfo(NamedList tokenNL) {
+  protected TokenInfo buildTokenInfo(NamedList<Object> tokenNL) {
     String text = (String) tokenNL.get("text");
     String rawText = (String) tokenNL.get("rawText");
     String type = (String) tokenNL.get("type");

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/DocumentAnalysisResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/DocumentAnalysisResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/DocumentAnalysisResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/DocumentAnalysisResponse.java Wed Feb  9 09:35:27 2011
@@ -42,24 +42,30 @@ public class DocumentAnalysisResponse ex
   public void setResponse(NamedList<Object> response) {
     super.setResponse(response);
 
-    NamedList<Object> analysis = (NamedList<Object>) response.get("analysis");
-    for (Map.Entry<String, Object> documentEntry : analysis) {
-      DocumentAnalysis documentAnalysis = new DocumentAnalysis(documentEntry.getKey());
-      NamedList<Object> document = (NamedList<Object>) documentEntry.getValue();
-      for (Map.Entry<String, Object> fieldEntry : document) {
+    @SuppressWarnings("unchecked")
+    NamedList<NamedList<NamedList<Object>>> analysis 
+      = (NamedList<NamedList<NamedList<Object>>>) response.get("analysis");
+    for (Map.Entry<String, NamedList<NamedList<Object>>> document : analysis) {
+      DocumentAnalysis documentAnalysis = new DocumentAnalysis(document.getKey());
+      for (Map.Entry<String, NamedList<Object>> fieldEntry : document.getValue()) {
         FieldAnalysis fieldAnalysis = new FieldAnalysis(fieldEntry.getKey());
-        NamedList field = (NamedList) fieldEntry.getValue();
 
-        NamedList<Object> query = (NamedList<Object>) field.get("query");
+        NamedList<Object> field = fieldEntry.getValue();
+
+        @SuppressWarnings("unchecked")
+        NamedList<List<NamedList<Object>>> query 
+          = (NamedList<List<NamedList<Object>>>) field.get("query");
         if (query != null) {
           List<AnalysisPhase> phases = buildPhases(query);
           fieldAnalysis.setQueryPhases(phases);
         }
-
-        NamedList<Object> index = (NamedList<Object>) field.get("index");
-        for (Map.Entry<String, Object> valueEntry : index) {
+        
+        @SuppressWarnings("unchecked")
+        NamedList<NamedList<List<NamedList<Object>>>> index 
+          = (NamedList<NamedList<List<NamedList<Object>>>>) field.get("index");
+        for (Map.Entry<String, NamedList<List<NamedList<Object>>>> valueEntry : index) {
           String fieldValue = valueEntry.getKey();
-          NamedList<Object> valueNL = (NamedList<Object>) valueEntry.getValue();
+          NamedList<List<NamedList<Object>>> valueNL = valueEntry.getValue();
           List<AnalysisPhase> phases = buildPhases(valueNL);
           fieldAnalysis.setIndexPhases(fieldValue, phases);
         }

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldAnalysisResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldAnalysisResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldAnalysisResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldAnalysisResponse.java Wed Feb  9 09:35:27 2011
@@ -42,35 +42,35 @@ public class FieldAnalysisResponse exten
   public void setResponse(NamedList<Object> response) {
     super.setResponse(response);
 
-    NamedList analysisNL = (NamedList) response.get("analysis");
+    @SuppressWarnings("unchecked")
+    NamedList<NamedList<NamedList<NamedList<List<NamedList<Object>>>>>> analysisNL 
+      = (NamedList<NamedList<NamedList<NamedList<List<NamedList<Object>>>>>>) response.get("analysis");
 
-    NamedList<Object> fieldTypesNL = (NamedList<Object>) analysisNL.get("field_types");
-    for (Map.Entry<String, Object> entry : fieldTypesNL) {
-      Analysis analysis = new Analysis();
-      NamedList fieldTypeNL = (NamedList) entry.getValue();
-      NamedList<Object> queryNL = (NamedList<Object>) fieldTypeNL.get("query");
-      List<AnalysisPhase> phases = (queryNL == null) ? null : buildPhases(queryNL);
-      analysis.setQueryPhases(phases);
-      NamedList<Object> indexNL = (NamedList<Object>) fieldTypeNL.get("index");
-      phases = buildPhases(indexNL);
-      analysis.setIndexPhases(phases);
-      String fieldTypeName = entry.getKey();
-      analysisByFieldTypeName.put(fieldTypeName, analysis);
+    for (Map.Entry<String, NamedList<NamedList<List<NamedList<Object>>>>> entry 
+           : analysisNL.get("field_types")) {
+
+      analysisByFieldTypeName.put(entry.getKey(), buildAnalysis(entry.getValue()));
     }
 
-    NamedList<Object> fieldNamesNL = (NamedList<Object>) analysisNL.get("field_names");
-    for (Map.Entry<String, Object> entry : fieldNamesNL) {
+    for (Map.Entry<String, NamedList<NamedList<List<NamedList<Object>>>>> entry 
+           : analysisNL.get("field_names")) {
+
+      analysisByFieldName.put(entry.getKey(), buildAnalysis(entry.getValue()));
+    }
+  }
+
+  private Analysis buildAnalysis(NamedList<NamedList<List<NamedList<Object>>>> value) {
       Analysis analysis = new Analysis();
-      NamedList fieldNameNL = (NamedList) entry.getValue();
-      NamedList<Object> queryNL = (NamedList<Object>) fieldNameNL.get("query");
+      
+      NamedList<List<NamedList<Object>>> queryNL = value.get("query");
       List<AnalysisPhase> phases = (queryNL == null) ? null : buildPhases(queryNL);
       analysis.setQueryPhases(phases);
-      NamedList<Object> indexNL = (NamedList<Object>) fieldNameNL.get("index");
+
+      NamedList<List<NamedList<Object>>> indexNL = value.get("index");
       phases = buildPhases(indexNL);
       analysis.setIndexPhases(phases);
-      String fieldName = entry.getKey();
-      analysisByFieldName.put(fieldName, analysis);
-    }
+      
+      return analysis;
   }
 
   /**

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldStatsInfo.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldStatsInfo.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldStatsInfo.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/FieldStatsInfo.java Wed Feb  9 09:35:27 2011
@@ -74,11 +74,13 @@ public class FieldStatsInfo implements S
         stddev = (Double)entry.getValue();
       }
       else if( "facets".equals( entry.getKey() ) ) {
+        @SuppressWarnings("unchecked")
         NamedList<Object> fields = (NamedList<Object>)entry.getValue();
         facets = new HashMap<String, List<FieldStatsInfo>>();
         for( Map.Entry<String, Object> ev : fields ) {
           List<FieldStatsInfo> vals = new ArrayList<FieldStatsInfo>();
           facets.put( ev.getKey(), vals );
+          @SuppressWarnings("unchecked")
           NamedList<NamedList<Object>> vnl = (NamedList<NamedList<Object>>) ev.getValue();
           for( int i=0; i<vnl.size(); i++ ) {
             String n = vnl.getName(i);
@@ -92,6 +94,7 @@ public class FieldStatsInfo implements S
     }
   }
   
+  @Override
   public String toString()
   {
     StringBuilder sb = new StringBuilder();

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/QueryResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/QueryResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/QueryResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/QueryResponse.java Wed Feb  9 09:35:27 2011
@@ -44,9 +44,9 @@ public class QueryResponse extends SolrR
   private NamedList<Object> _facetInfo = null;
   private NamedList<Object> _debugInfo = null;
   private NamedList<Object> _highlightingInfo = null;
-  private NamedList<Object> _spellInfo = null;
+  private NamedList<NamedList<Object>> _spellInfo = null;
   private NamedList<Object> _statsInfo = null;
-  private NamedList<Object> _termsInfo = null;
+  private NamedList<NamedList<Number>> _termsInfo = null;
 
   // Facet stuff
   private Map<String,Integer> _facetQuery = null;
@@ -105,7 +105,8 @@ public class QueryResponse extends SolrR
       }
       else if( "facet_counts".equals( n ) ) {
         _facetInfo = (NamedList<Object>) res.getVal( i );
-        extractFacetInfo( _facetInfo );
+        // extractFacetInfo inspects _results, so defer calling it
+        // in case it hasn't been populated yet.
       }
       else if( "debug".equals( n ) ) {
         _debugInfo = (NamedList<Object>) res.getVal( i );
@@ -116,7 +117,7 @@ public class QueryResponse extends SolrR
         extractHighlightingInfo( _highlightingInfo );
       }
       else if ( "spellcheck".equals( n ) )  {
-        _spellInfo = (NamedList<Object>) res.getVal( i );
+        _spellInfo = (NamedList<NamedList<Object>>) res.getVal( i );
         extractSpellCheckInfo( _spellInfo );
       }
       else if ( "stats".equals( n ) )  {
@@ -124,17 +125,18 @@ public class QueryResponse extends SolrR
         extractStatsInfo( _statsInfo );
       }
       else if ( "terms".equals( n ) ) {
-        _termsInfo = (NamedList<Object>) res.getVal( i );
+        _termsInfo = (NamedList<NamedList<Number>>) res.getVal( i );
         extractTermsInfo( _termsInfo );
       }
     }
+    if(_facetInfo != null) extractFacetInfo( _facetInfo );
   }
 
-  private void extractSpellCheckInfo(NamedList<Object> spellInfo) {
+  private void extractSpellCheckInfo(NamedList<NamedList<Object>> spellInfo) {
     _spellResponse = new SpellCheckResponse(spellInfo);
   }
 
-  private void extractTermsInfo(NamedList<Object> termsInfo) {
+  private void extractTermsInfo(NamedList<NamedList<Number>> termsInfo) {
     _termsResponse = new TermsResponse(termsInfo);
   }
   

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/SpellCheckResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/SpellCheckResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/SpellCheckResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/SpellCheckResponse.java Wed Feb  9 09:35:27 2011
@@ -35,8 +35,8 @@ public class SpellCheckResponse {
   private List<Suggestion> suggestions = new ArrayList<Suggestion>();
   Map<String, Suggestion> suggestionMap = new LinkedHashMap<String, Suggestion>();
 
-  public SpellCheckResponse(NamedList<Object> spellInfo) {
-    NamedList<Object> sugg = (NamedList<Object>) spellInfo.get("suggestions");
+  public SpellCheckResponse(NamedList<NamedList<Object>> spellInfo) {
+    NamedList<Object> sugg = spellInfo.get("suggestions");
     if (sugg == null) {
       correctlySpelled = true;
       return;
@@ -55,12 +55,14 @@ public class SpellCheckResponse {
 						collations.add(new Collation()
 								.setCollationQueryString((String) sugg.getVal(i)));
 					} else if (o instanceof NamedList) {
-						NamedList expandedCollation = (NamedList) o;
-						String collationQuery = (String) expandedCollation
-								.get("collationQuery");
+            @SuppressWarnings("unchecked")
+						NamedList<Object> expandedCollation = (NamedList<Object>) o;
+						String collationQuery 
+              = (String) expandedCollation.get("collationQuery");
 						int hits = (Integer) expandedCollation.get("hits");
-						NamedList<String> misspellingsAndCorrections = (NamedList<String>) expandedCollation
-								.get("misspellingsAndCorrections");
+            @SuppressWarnings("unchecked")
+						NamedList<String> misspellingsAndCorrections 
+              = (NamedList<String>) expandedCollation.get("misspellingsAndCorrections");
 
 						Collation collation = new Collation();
 						collation.setCollationQueryString(collationQuery);
@@ -79,6 +81,7 @@ public class SpellCheckResponse {
 					}
 				} 	
       } else {
+        @SuppressWarnings("unchecked")
         Suggestion s = new Suggestion(n, (NamedList<Object>) sugg.getVal(i));
         suggestionMap.put(n, s);
         suggestions.add(s);
@@ -112,7 +115,7 @@ public class SpellCheckResponse {
    * <p>
    *  Return the first collated query string.  For convenience and backwards-compatibility.  Use getCollatedResults() for full data.
    * </p>
-   * @return
+   * @return first collated query string
    */
   public String getCollatedResult() {
     return collations==null || collations.size()==0 ? null : collations.get(0).collationQueryString;
@@ -123,7 +126,7 @@ public class SpellCheckResponse {
    *  Return all collations.  
    *  Will include # of hits and misspelling-to-correction details if "spellcheck.collateExtendedResults was true.
    * </p>
-   * @return
+   * @return all collations
    */
   public List<Collation> getCollatedResults() {
   	return collations;
@@ -152,16 +155,21 @@ public class SpellCheckResponse {
         } else if ("origFreq".equals(n)) {
           originalFrequency = (Integer) suggestion.getVal(i);
         } else if ("suggestion".equals(n)) {
+          @SuppressWarnings("unchecked")
           List list = (List)suggestion.getVal(i);
           if (list.size() > 0 && list.get(0) instanceof NamedList) {
             // extended results detected
+            @SuppressWarnings("unchecked")
+            List<NamedList> extended = (List<NamedList>)list;
             alternativeFrequencies = new ArrayList<Integer>();
-            for (NamedList nl : (List<NamedList>)list) {
+            for (NamedList nl : extended) {
               alternatives.add((String)nl.get("word"));
               alternativeFrequencies.add((Integer)nl.get("freq"));
             }
           } else {
-            alternatives.addAll(list);
+            @SuppressWarnings("unchecked")
+            List<String> alts = (List<String>) list;
+            alternatives.addAll(alts);
           }
         }
       }

Modified: lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/TermsResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/TermsResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/TermsResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/solrj/org/apache/solr/client/solrj/response/TermsResponse.java Wed Feb  9 09:35:27 2011
@@ -29,14 +29,14 @@ import java.util.Map;
 public class TermsResponse {
   private Map<String, List<Term>> termMap = new HashMap<String, List<Term>>();
   
-  public TermsResponse(NamedList<Object> termsInfo) {
+  public TermsResponse(NamedList<NamedList<Number>> termsInfo) {
     for (int i = 0; i < termsInfo.size(); i++) {
       String fieldName = termsInfo.getName(i);
       List<Term> itemList = new ArrayList<Term>();
-      NamedList<Object> items = (NamedList<Object>) termsInfo.getVal(i);
+      NamedList<Number> items = termsInfo.getVal(i);
       
       for (int j = 0; j < items.size(); j++) {
-        Term t = new Term(items.getName(j), ((Number) items.getVal(j)).longValue());
+        Term t = new Term(items.getName(j), items.getVal(j).longValue());
         itemList.add(t);
       }
       

Modified: lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-copyfield-test.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-copyfield-test.xml?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-copyfield-test.xml (original)
+++ lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-copyfield-test.xml Wed Feb  9 09:35:27 2011
@@ -202,13 +202,14 @@
     <fieldtype name="engporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="custengporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="stopfilt" class="solr.TextField">

Modified: lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-required-fields.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-required-fields.xml?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-required-fields.xml (original)
+++ lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema-required-fields.xml Wed Feb  9 09:35:27 2011
@@ -193,13 +193,14 @@
     <fieldtype name="engporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="custengporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="stopfilt" class="solr.TextField">

Modified: lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema.xml?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema.xml (original)
+++ lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema.xml Wed Feb  9 09:35:27 2011
@@ -236,13 +236,14 @@
     <fieldtype name="engporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="custengporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="stopfilt" class="solr.TextField">
@@ -401,8 +402,8 @@
    <field name="text" type="text" indexed="true" stored="false"/>
    <field name="subject" type="text" indexed="true" stored="true"/>
    <field name="title" type="nametext" indexed="true" stored="true"/>
-   <field name="weight" type="float" indexed="true" stored="true"/>
-   <field name="bday" type="date" indexed="true" stored="true"/>
+   <field name="weight" type="float" indexed="true" stored="true" multiValued="false"/>
+   <field name="bday" type="date" indexed="true" stored="true" multiValued="false"/>
 
    <field name="title_stemmed" type="text" indexed="true" stored="false"/>
    <field name="title_lettertok" type="lettertok" indexed="true" stored="false"/>
@@ -479,9 +480,10 @@
 
    <field name="numberpartfail" type="failtype1" indexed="true" stored="true"/>
 
-   <field name="nullfirst" type="string" indexed="true" stored="true" sortMissingFirst="true"/>
+   <field name="nullfirst" type="string" indexed="true" stored="true" sortMissingFirst="true" multiValued="false"/>
 
    <field name="subword" type="subword" indexed="true" stored="true"/>
+   <field name="subword_offsets" type="subword" indexed="true" stored="true" termOffsets="true"/>
    <field name="numericsubword" type="numericsubword" indexed="true" stored="true"/>
    <field name="protectedsubword" type="protectedsubword" indexed="true" stored="true"/>
 
@@ -506,27 +508,40 @@
         both match, the first appearing in the schema will be used.
    -->
    <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
+   <dynamicField name="*_i1"  type="int"    indexed="true" stored="true" multiValued="false"/>
+                 
    <dynamicField name="*_s"  type="string"  indexed="true"  stored="true"/>
    <dynamicField name="*_s1"  type="string"  indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_l"  type="long"   indexed="true"  stored="true"/>
+   <dynamicField name="*_l1"  type="long"   indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_t"  type="text"    indexed="true"  stored="true"/>
    <dynamicField name="*_b"  type="boolean" indexed="true"  stored="true"/>
    <dynamicField name="*_f"  type="float"  indexed="true"  stored="true"/>
+   <dynamicField name="*_f1"  type="float"  indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_d"  type="double" indexed="true"  stored="true"/>
+   <dynamicField name="*_d1"  type="double" indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_dt" type="date"    indexed="true"  stored="true"/>
+   <dynamicField name="*_dt1" type="date"    indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_bcd" type="bcdstr" indexed="true"  stored="true"/>
 
       <!-- some trie-coded dynamic fields for faster range queries -->
    <dynamicField name="*_ti" type="tint"    indexed="true"  stored="true"/>
+   <dynamicField name="*_ti1" type="tint"    indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_tl" type="tlong"   indexed="true"  stored="true"/>
+   <dynamicField name="*_tl1" type="tlong"   indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_tf" type="tfloat"  indexed="true"  stored="true"/>
+   <dynamicField name="*_tf1" type="tfloat"  indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_td" type="tdouble" indexed="true"  stored="true"/>
+   <dynamicField name="*_td1" type="tdouble" indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_tdt" type="tdate"  indexed="true"  stored="true"/>
+   <dynamicField name="*_tdt1" type="tdate"  indexed="true"  stored="true" multiValued="false"/>
 
-   <dynamicField name="*_si"  type="sint"  indexed="true"  stored="true"/>
+   <dynamicField name="*_si"  type="sint"  indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_sl"  type="slong"  indexed="true"  stored="true"/>
    <dynamicField name="*_sf"  type="sfloat"  indexed="true"  stored="true"/>
+   <dynamicField name="*_sf1"  type="sfloat"  indexed="true"  stored="true" multiValued="false"/>
    <dynamicField name="*_sd"  type="sdouble"  indexed="true"  stored="true"/>
+   <dynamicField name="*_sd1"  type="sdouble"  indexed="true"  stored="true" multiValued="false"/>
 
    <dynamicField name="*_pi"  type="pint"    indexed="true"  stored="true"/>
    <dynamicField name="*_pf"  type="pfloat"  indexed="true"  stored="true"/>

Modified: lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema12.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema12.xml?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema12.xml (original)
+++ lucene/dev/branches/docvalues/solr/src/test-files/solr/conf/schema12.xml Wed Feb  9 09:35:27 2011
@@ -252,13 +252,14 @@
     <fieldtype name="engporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="custengporterfilt" class="solr.TextField">
       <analyzer>
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
     <fieldtype name="stopfilt" class="solr.TextField">
@@ -286,14 +287,14 @@
           <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
           <filter class="solr.LowerCaseFilterFactory"/>
           <filter class="solr.StopFilterFactory"/>
-          <filter class="solr.EnglishPorterFilterFactory"/>
+          <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
           <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
           <filter class="solr.LowerCaseFilterFactory"/>
           <filter class="solr.StopFilterFactory"/>
-          <filter class="solr.EnglishPorterFilterFactory"/>
+          <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
 
@@ -303,14 +304,14 @@
           <filter class="solr.LowerCaseFilterFactory"/>
           <filter class="solr.WordDelimiterFilterFactory" protected="protwords.txt" splitOnNumerics="0" splitOnCaseChange="0" generateWordParts="1" generateNumberParts="0" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
           <filter class="solr.StopFilterFactory"/>
-          <filter class="solr.EnglishPorterFilterFactory"/>
+          <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
           <filter class="solr.LowerCaseFilterFactory"/>
           <filter class="solr.WordDelimiterFilterFactory" protected="protwords.txt" splitOnNumerics="0" splitOnCaseChange="0" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
           <filter class="solr.StopFilterFactory"/>
-          <filter class="solr.EnglishPorterFilterFactory"/>
+          <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldtype>
 
@@ -375,7 +376,7 @@
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1"
                 catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
         <filter class="solr.LowerCaseFilterFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
         <tokenizer class="solr.WhitespaceTokenizerFactory"/>
@@ -384,7 +385,7 @@
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0"
                 catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
         <filter class="solr.LowerCaseFilterFactory"/>
-        <filter class="solr.EnglishPorterFilterFactory"/>
+        <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldType>
 
@@ -397,7 +398,7 @@
           <tokenizer class="solr.WhitespaceTokenizerFactory"/>
           <filter class="solr.SynonymFilterFactory"
                   synonyms="synonyms.txt" expand="true" />
-          <filter class="solr.EnglishPorterFilterFactory"/>
+          <filter class="solr.PorterStemFilterFactory"/>
           <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
       </analyzer>
     </fieldtype>
@@ -544,6 +545,8 @@
 
    <dynamicField name="*_i"  type="int"    indexed="true"  stored="true"/>
    <dynamicField name="*_is"  type="int"    indexed="true"  stored="true" multiValued="true"/>
+   <dynamicField name="*_s1"  type="string"  indexed="true" stored="true" multiValued="false"/>
+   <!-- :TODO: why are these identical?!?!?! -->
    <dynamicField name="*_s"  type="string"  indexed="true"  stored="true" multiValued="true"/>
    <dynamicField name="*_ss"  type="string"  indexed="true"  stored="true" multiValued="true"/>
    <dynamicField name="*_l"  type="long"   indexed="true"  stored="true"/>

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BaseDistributedSearchTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BaseDistributedSearchTestCase.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BaseDistributedSearchTestCase.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BaseDistributedSearchTestCase.java Wed Feb  9 09:35:27 2011
@@ -1,5 +1,22 @@
 package org.apache.solr;
 
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -81,24 +98,28 @@ public abstract class BaseDistributedSea
   public static Logger log = LoggerFactory.getLogger(BaseDistributedSearchTestCase.class);
   
   public static RandVal rint = new RandVal() {
+    @Override
     public Object val() {
       return r.nextInt();
     }
   };
 
   public static RandVal rlong = new RandVal() {
+    @Override
     public Object val() {
       return r.nextLong();
     }
   };
 
   public static RandVal rfloat = new RandVal() {
+    @Override
     public Object val() {
       return r.nextFloat();
     }
   };
 
   public static RandVal rdouble = new RandVal() {
+    @Override
     public Object val() {
       return r.nextDouble();
     }
@@ -113,7 +134,7 @@ public abstract class BaseDistributedSea
    */
   public abstract void doTest() throws Exception;
 
-  public static String[] fieldNames = new String[]{"n_ti", "n_f", "n_tf", "n_d", "n_td", "n_l", "n_tl", "n_dt", "n_tdt"};
+  public static String[] fieldNames = new String[]{"n_ti1", "n_f1", "n_tf1", "n_d1", "n_td1", "n_l1", "n_tl1", "n_dt1", "n_tdt1"};
   public static RandVal[] randVals = new RandVal[]{rint, rfloat, rfloat, rdouble, rdouble, rlong, rlong, rdate, rdate};
 
   protected String[] getFieldNames() {
@@ -124,12 +145,21 @@ public abstract class BaseDistributedSea
     return randVals;
   }
 
+  /**
+   * Subclasses can override this to change a test's solr home
+   * (default is in test-files)
+   */
+  public String getSolrHome() {
+    return SolrTestCaseJ4.TEST_HOME;
+  }
+  
   @Override
   public void setUp() throws Exception {
     SolrTestCaseJ4.resetExceptionIgnores();  // ignore anything with ignore_exception in it
     super.setUp();
     System.setProperty("solr.test.sys.prop1", "propone");
     System.setProperty("solr.test.sys.prop2", "proptwo");
+    System.setProperty("solr.solr.home", getSolrHome());
     testDir = new File(TEMP_DIR,
             getClass().getName() + "-" + System.currentTimeMillis());
     testDir.mkdirs();
@@ -311,6 +341,7 @@ public abstract class BaseDistributedSea
       Thread[] threads = new Thread[nThreads];
       for (int i = 0; i < threads.length; i++) {
         threads[i] = new Thread() {
+          @Override
           public void run() {
             for (int j = 0; j < stress; j++) {
               int which = r.nextInt(clients.size());
@@ -597,6 +628,7 @@ public abstract class BaseDistributedSea
   public static class RandDate extends RandVal {
     public static TrieDateField df = new TrieDateField();
 
+    @Override
     public Object val() {
       long v = r.nextLong();
       Date d = new Date(v);

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/BasicFunctionalityTest.java Wed Feb  9 09:35:27 2011
@@ -29,6 +29,8 @@ import javax.xml.parsers.DocumentBuilder
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Fieldable;
 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;
@@ -47,6 +49,8 @@ import org.apache.solr.schema.SchemaFiel
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
 import org.apache.solr.update.SolrIndexWriter;
+
+
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -221,10 +225,15 @@ public class BasicFunctionalityTest exte
   public void testRequestHandlerBaseException() {
     final String tmp = "BOO! ignore_exception";
     SolrRequestHandler handler = new RequestHandlerBase() {
+        @Override
         public String getDescription() { return tmp; }
+        @Override
         public String getSourceId() { return tmp; }
+        @Override
         public String getSource() { return tmp; }
+        @Override
         public String getVersion() { return tmp; }
+        @Override
         public void handleRequestBody
           ( SolrQueryRequest req, SolrQueryResponse rsp ) {
           throw new RuntimeException(tmp);
@@ -653,6 +662,39 @@ public class BasicFunctionalityTest exte
             "*[count(//doc)=1]");
   }
 
+  @Test
+  public void testAbuseOfSort() {
+
+    assertU(adoc("id", "9999991",
+                 "sortabuse_b", "true",
+                 "sortabuse_t", "zzz xxx ccc vvv bbb nnn aaa sss ddd fff ggg"));
+    assertU(adoc("id", "9999992",
+                 "sortabuse_b", "true",
+                 "sortabuse_t", "zzz xxx ccc vvv bbb nnn qqq www eee rrr ttt"));
+
+    assertU(commit());
+  
+    try {
+      assertQ("sort on something that shouldn't work",
+              req("q", "sortabuse_b:true",
+                  "sort", "sortabuse_t asc"),
+              "*[count(//doc)=2]");
+      fail("no error encountered when sorting on sortabuse_t");
+    } catch (Exception outer) {
+      // EXPECTED
+      Throwable root = getRootCause(outer);
+      assertEquals("sort exception root cause", 
+                   SolrException.class, root.getClass());
+      SolrException e = (SolrException) root;
+      assertEquals("incorrect error type", 
+                   SolrException.ErrorCode.BAD_REQUEST,
+                   SolrException.ErrorCode.getErrorCode(e.code()));
+      assertTrue("exception doesn't contain field name",
+                 -1 != e.getMessage().indexOf("sortabuse_t"));
+    }
+  }
+
+
 //   /** this doesn't work, but if it did, this is how we'd test it. */
 //   public void testOverwriteFalse() {
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/ConvertedLegacyTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/ConvertedLegacyTest.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/ConvertedLegacyTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/ConvertedLegacyTest.java Wed Feb  9 09:35:27 2011
@@ -123,9 +123,9 @@ public class ConvertedLegacyTest extends
     // test range
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">pear</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">apple</field><field name=\"val_s1\">apple</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">banana</field><field name=\"val_s1\">banana</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"val_s\">pear</field><field name=\"val_s1\">pear</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("val_s:[a TO z]")
             ,"//*[@numFound='3'] "
@@ -228,7 +228,7 @@ public class ConvertedLegacyTest extends
     args = new HashMap<String,String>();
     args.put("version","2.0");
     args.put("defType","lucenePlusSort");
-    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s asc",
+    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s1 asc",
                                     "standard", 0, 0 , args);
     assertQ(req
             ,"//*[@numFound='3'] "
@@ -237,7 +237,7 @@ public class ConvertedLegacyTest extends
     args = new HashMap<String,String>();
     args.put("version","2.0");
     args.put("defType","lucenePlusSort");
-    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s desc",
+    req = new LocalSolrQueryRequest(h.getCore(), "val_s:[a TO z];val_s1 desc",
                                     "standard", 0, 0 , args);
     assertQ(req
             ,"//*[@numFound='3'] "
@@ -509,133 +509,133 @@ public class ConvertedLegacyTest extends
     // test integer ranges and sorting
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">1234567890</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">10</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">2</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">15</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">-987654321</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">2147483647</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">-2147483648</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1234567890</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">10</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">15</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-987654321</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">2147483647</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">-2147483648</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_i1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id:44")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_i:2147483647")
+    assertQ(req("num_i1:2147483647")
             ,"//@numFound[.='1']  "
             ,"//int[.='2147483647']"
             );
-    assertQ(req("num_i:\"-2147483648\"")
+    assertQ(req("num_i1:\"-2147483648\"")
             ,"//@numFound[.='1'] "
             ,"//int[.='-2147483648']"
             );
-    assertQ(req("id:44;num_i asc;")
+    assertQ(req("id:44;num_i1 asc;")
             ,"//doc[1]/int[.='-2147483648'] "
             ,"//doc[last()]/int[.='2147483647']"
             );
-    assertQ(req("id:44;num_i desc;")
+    assertQ(req("id:44;num_i1 desc;")
             ,"//doc[1]/int[.='2147483647'] "
             ,"//doc[last()]/int[.='-2147483648']"
             );
-    assertQ(req("num_i:[0 TO 9]")
+    assertQ(req("num_i1:[0 TO 9]")
             ,"*[count(//doc)=3]"
             );
-    assertQ(req("num_i:[-2147483648 TO 2147483647]")
+    assertQ(req("num_i1:[-2147483648 TO 2147483647]")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_i:[-10 TO -1]")
+    assertQ(req("num_i1:[-10 TO -1]")
             ,"*[count(//doc)=1]"
             );
 
     // test long ranges and sorting
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">1234567890</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">10</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">2</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">15</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">-987654321</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">9223372036854775807</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">-9223372036854775808</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1234567890</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">10</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">2</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">15</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-987654321</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">9223372036854775807</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">-9223372036854775808</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_l1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id:44")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_l:9223372036854775807")
+    assertQ(req("num_l1:9223372036854775807")
             ,"//@numFound[.='1'] "
             ,"//long[.='9223372036854775807']"
             );
-    assertQ(req("num_l:\"-9223372036854775808\"")
+    assertQ(req("num_l1:\"-9223372036854775808\"")
             ,"//@numFound[.='1'] "
             ,"//long[.='-9223372036854775808']"
             );
-    assertQ(req("id:44;num_l asc;")
+    assertQ(req("id:44;num_l1 asc;")
             ,"//doc[1]/long[.='-9223372036854775808'] "
             ,"//doc[last()]/long[.='9223372036854775807']"
             );
-    assertQ(req("id:44;num_l desc;")
+    assertQ(req("id:44;num_l1 desc;")
             ,"//doc[1]/long[.='9223372036854775807'] "
             ,"//doc[last()]/long[.='-9223372036854775808']"
             );
-    assertQ(req("num_l:[-1 TO 9]")
+    assertQ(req("num_l1:[-1 TO 9]")
             ,"*[count(//doc)=4]"
             );
-    assertQ(req("num_l:[-9223372036854775808 TO 9223372036854775807]")
+    assertQ(req("num_l1:[-9223372036854775808 TO 9223372036854775807]")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_l:[-10 TO -1]")
+    assertQ(req("num_l1:[-10 TO -1]")
             ,"*[count(//doc)=1]"
             );
 
     // test binary float ranges and sorting
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">1.4142135</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">Infinity</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">-Infinity</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">NaN</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">2</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">-987654321</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">-999999.99</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">-1e20</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">1.4142135</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">Infinity</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-Infinity</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">NaN</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">2</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-987654321</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-999999.99</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">-1e20</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sf1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id:44")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_sf:Infinity")
+    assertQ(req("num_sf1:Infinity")
             ,"//@numFound[.='1']  "
             ,"//float[.='Infinity']"
             );
-    assertQ(req("num_sf:\"-Infinity\"")
+    assertQ(req("num_sf1:\"-Infinity\"")
             ,"//@numFound[.='1']  "
             ,"//float[.='-Infinity']"
             );
-    assertQ(req("num_sf:\"NaN\"")
+    assertQ(req("num_sf1:\"NaN\"")
             ,"//@numFound[.='1']  "
             ,"//float[.='NaN']"
             );
-    assertQ(req("num_sf:\"-1e20\"")
+    assertQ(req("num_sf1:\"-1e20\"")
             ,"//@numFound[.='1']"
             );
-    assertQ(req("id:44;num_sf asc;")
+    assertQ(req("id:44;num_sf1 asc;")
             ,"//doc[1]/float[.='-Infinity'] "
             ,"//doc[last()]/float[.='NaN']"
             );
-    assertQ(req("id:44;num_sf desc;")
+    assertQ(req("id:44;num_sf1 desc;")
             ,"//doc[1]/float[.='NaN'] "
             ,"//doc[last()]/float[.='-Infinity']"
             );
-    assertQ(req("num_sf:[-1 TO 2]")
+    assertQ(req("num_sf1:[-1 TO 2]")
             ,"*[count(//doc)=4]"
             );
-    assertQ(req("num_sf:[-Infinity TO Infinity]")
+    assertQ(req("num_sf1:[-Infinity TO Infinity]")
             ,"*[count(//doc)=9]"
             );
 
@@ -644,50 +644,50 @@ public class ConvertedLegacyTest extends
     // test binary double ranges and sorting
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">1.4142135</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">Infinity</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">-Infinity</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">NaN</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">2</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">1e-100</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">-999999.99</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">-1e100</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">1.4142135</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">Infinity</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-Infinity</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">NaN</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">2</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">1e-100</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-999999.99</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">-1e100</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"num_sd1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id:44")
             ,"*[count(//doc)=10]"
             );
-    assertQ(req("num_sd:Infinity")
+    assertQ(req("num_sd1:Infinity")
             ,"//@numFound[.='1']  "
             ,"//double[.='Infinity']"
             );
-    assertQ(req("num_sd:\"-Infinity\"")
+    assertQ(req("num_sd1:\"-Infinity\"")
             ,"//@numFound[.='1']  "
             ,"//double[.='-Infinity']"
             );
-    assertQ(req("num_sd:\"NaN\"")
+    assertQ(req("num_sd1:\"NaN\"")
             ,"//@numFound[.='1']  "
             ,"//double[.='NaN']"
             );
-    assertQ(req("num_sd:\"-1e100\"")
+    assertQ(req("num_sd1:\"-1e100\"")
             ,"//@numFound[.='1']"
             );
-    assertQ(req("num_sd:\"1e-100\"")
+    assertQ(req("num_sd1:\"1e-100\"")
             ,"//@numFound[.='1']"
             );
-    assertQ(req("id:44;num_sd asc;")
+    assertQ(req("id:44;num_sd1 asc;")
             ,"//doc[1]/double[.='-Infinity'] "
             ,"//doc[last()]/double[.='NaN']"
             );
-    assertQ(req("id:44;num_sd desc;")
+    assertQ(req("id:44;num_sd1 desc;")
             ,"//doc[1]/double[.='NaN'] "
             ,"//doc[last()]/double[.='-Infinity']"
             );
-    assertQ(req("num_sd:[-1 TO 2]")
+    assertQ(req("num_sd1:[-1 TO 2]")
             ,"*[count(//doc)=5]"
             );
-    assertQ(req("num_sd:[-Infinity TO Infinity]")
+    assertQ(req("num_sd1:[-Infinity TO Infinity]")
             ,"*[count(//doc)=9]"
             );
 
@@ -695,38 +695,38 @@ public class ConvertedLegacyTest extends
     // test sorting on multiple fields
 
     assertU("<delete><id>44</id></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">10</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">1</field><field name=\"b_i\">100</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">15</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">1</field><field name=\"b_i\">50</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">10</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">100</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">15</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">1</field><field name=\"b_i1\">50</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id\">44</field><field name=\"a_i1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id:44")
             ,"*[count(//doc)=6]"
             );
 
-    assertQ(req("id:44; a_i asc,b_i desc")
+    assertQ(req("id:44; a_i1 asc,b_i1 desc")
             ,"*[count(//doc)=6] "
             ,"//doc[3]/int[.='100'] "
             ,"//doc[4]/int[.='50']"
             );
-    assertQ(req("id:44;a_i asc  , b_i asc;")
+    assertQ(req("id:44;a_i1 asc  , b_i1 asc;")
             ,"*[count(//doc)=6] "
             ,"//doc[3]/int[.='50'] "
             ,"//doc[4]/int[.='100']"
             );
-    assertQ(req("id:44;a_i asc;")
+    assertQ(req("id:44;a_i1 asc;")
             ,"*[count(//doc)=6] "
             ,"//doc[1]/int[.='-1'] "
             ,"//doc[last()]/int[.='15']"
             );
-    assertQ(req("id:44;a_i asc , score top;")
+    assertQ(req("id:44;a_i1 asc , score top;")
             ,"*[count(//doc)=6] "
             ,"//doc[1]/int[.='-1'] "
             ,"//doc[last()]/int[.='15']"
             );
-    assertQ(req("id:44; score top , a_i top, b_i bottom ;")
+    assertQ(req("id:44; score top , a_i1 top, b_i1 bottom ;")
             ,"*[count(//doc)=6] "
             ,"//doc[last()]/int[.='-1'] "
             ,"//doc[1]/int[.='15'] "
@@ -738,13 +738,13 @@ public class ConvertedLegacyTest extends
     // test sorting  with some docs missing the sort field
 
     assertU("<delete><query>id_i:[1000 TO 1010]</query></delete>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1000</field><field name=\"a_i\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1001</field><field name=\"a_i\">10</field><field name=\"nullfirst\">A</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1002</field><field name=\"a_i\">1</field><field name=\"b_si\">100</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1003</field><field name=\"a_i\">-1</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1004</field><field name=\"a_i\">15</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1005</field><field name=\"a_i\">1</field><field name=\"b_si\">50</field></doc></add>");
-    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1006</field><field name=\"a_i\">0</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1000</field><field name=\"a_i1\">1</field><field name=\"nullfirst\">Z</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1001</field><field name=\"a_i1\">10</field><field name=\"nullfirst\">A</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1002</field><field name=\"a_i1\">1</field><field name=\"b_si\">100</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1003</field><field name=\"a_i1\">-1</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1004</field><field name=\"a_i1\">15</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1005</field><field name=\"a_i1\">1</field><field name=\"b_si\">50</field></doc></add>");
+    assertU("<add overwrite=\"false\"><doc><field name=\"id_i\">1006</field><field name=\"a_i1\">0</field></doc></add>");
     assertU("<commit/>");
     assertQ(req("id_i:[1000 TO 1010]")
             ,"*[count(//doc)=7]"
@@ -759,13 +759,13 @@ public class ConvertedLegacyTest extends
             ,"//doc[1]/int[.='100'] "
             ,"//doc[2]/int[.='50']"
             );
-    assertQ(req("id_i:[1000 TO 1010]; a_i asc,b_si desc")
+    assertQ(req("id_i:[1000 TO 1010]; a_i1 asc,b_si desc")
             ,"*[count(//doc)=7] "
             ,"//doc[3]/int[.='100'] "
             ,"//doc[4]/int[.='50']  "
             ,"//doc[5]/int[.='1000']"
             );
-    assertQ(req("id_i:[1000 TO 1010]; a_i asc,b_si asc")
+    assertQ(req("id_i:[1000 TO 1010]; a_i1 asc,b_si asc")
             ,"*[count(//doc)=7] "
             ,"//doc[3]/int[.='50'] "
             ,"//doc[4]/int[.='100']  "

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/JSONTestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/JSONTestUtil.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/JSONTestUtil.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/JSONTestUtil.java Wed Feb  9 09:35:27 2011
@@ -135,14 +135,16 @@ class CollectionTester {
     if (!expected.equals(val)) {
 
       // make an exception for some numerics
-      if (expected instanceof Integer && val instanceof Long || expected instanceof Long && val instanceof Integer
+      if ((expected instanceof Integer && val instanceof Long || expected instanceof Long && val instanceof Integer)
           && ((Number)expected).longValue() == ((Number)val).longValue())
       {
-        // OK
-      } else if (expected instanceof Float && val instanceof Double || expected instanceof Double && val instanceof Float
-          && ((Number)expected).doubleValue() == ((Number)val).doubleValue())
-      {
-        // OK
+        return true;
+      } else if ((expected instanceof Float && val instanceof Double || expected instanceof Double && val instanceof Float)) {
+        double a = ((Number)expected).doubleValue();
+        double b = ((Number)val).doubleValue();
+        if (Double.compare(a,b) == 0) return true;
+        if (Math.abs(a-b) < 1e-5) return true;
+        return false;
       } else {
         setErr("mismatch: '" + expected + "'!='" + val + "'");
         return false;

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/SolrTestCaseJ4.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/SolrTestCaseJ4.java Wed Feb  9 09:35:27 2011
@@ -22,6 +22,7 @@ package org.apache.solr;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.noggit.CharArr;
 import org.apache.noggit.JSONUtil;
+import org.apache.noggit.ObjectBuilder;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.SolrInputField;
@@ -602,6 +603,7 @@ public abstract class SolrTestCaseJ4 ext
   /** Neccessary to make method signatures un-ambiguous */
   public static class XmlDoc {
     public String xml;
+    @Override
     public String toString() { return xml; }
   }
 
@@ -727,6 +729,7 @@ public abstract class SolrTestCaseJ4 ext
     public int order; // the order this document was added to the index
 
 
+    @Override
     public String toString() {
       return "Doc("+order+"):"+fields.toString();
     }
@@ -780,6 +783,7 @@ public abstract class SolrTestCaseJ4 ext
   public static class Fld {
     public FldType ftype;
     public List<Comparable> vals;
+    @Override
     public String toString() {
       return ftype.fname + "=" + (vals.size()==1 ? vals.get(0).toString() : vals.toString());
     }
@@ -834,17 +838,9 @@ public abstract class SolrTestCaseJ4 ext
     // commit an average of 10 times for large sets, or 10% of the time for small sets
     int commitOneOutOf = Math.max(nDocs/10, 10);
 
-
-    // find the max order (docid) and start from there
-    int order = -1;
-    for (Doc doc : model.values()) {
-      order = Math.max(order, doc.order);
-    }
-    order++;
-
     for (int i=0; i<nDocs; i++) {
       Doc doc = createDoc(descriptor);
-      doc.order = order++;
+      // doc.order = order++;
       updateJ(toJSON(doc), null);
       model.put(doc.id, doc);
 
@@ -867,6 +863,25 @@ public abstract class SolrTestCaseJ4 ext
       assertU(commit());
     }
 
+    // merging segments no longer selects just adjacent segments hence ids (doc.order) can be shuffled.
+    // we need to look at the index to determine the order.
+    String responseStr = h.query(req("q","*:*", "fl","id", "sort","_docid_ asc", "rows",Integer.toString(model.size()*2), "wt","json", "indent","true"));
+    Object response = ObjectBuilder.fromJSON(responseStr);
+
+    response = ((Map)response).get("response");
+    response = ((Map)response).get("docs");
+    List<Map> docList = (List<Map>)response;
+    int order = 0;
+    for (Map doc : docList) {
+      Object id = doc.get("id");
+      Doc modelDoc = model.get(id);
+      if (modelDoc == null) continue;  // may be some docs in the index that aren't modeled
+      modelDoc.order = order++;
+    }
+
+    // make sure we updated the order of all docs in the model
+    assertEquals(order, model.size());
+
     return model;
   }
 
@@ -1052,10 +1067,18 @@ public abstract class SolrTestCaseJ4 ext
   static String determineSourceHome() {
     // ugly, ugly hack to determine the example home without depending on the CWD
     // this is needed for example/multicore tests which reside outside the classpath
-    File base = getFile("solr/conf/");
+    File base = getFile("solr/conf/").getAbsoluteFile();
     while (!new File(base, "solr/CHANGES.txt").exists()) {
       base = base.getParentFile();
     }
     return new File(base, "solr/").getAbsolutePath();
   }
+
+  public static Throwable getRootCause(Throwable t) {
+    Throwable result = t;
+    for (Throwable cause = t; null != cause; cause = cause.getCause()) {
+      result = cause;
+    }
+    return result;
+  }
 }

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestDistributedSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestDistributedSearch.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestDistributedSearch.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestDistributedSearch.java Wed Feb  9 09:35:27 2011
@@ -38,7 +38,7 @@ public class TestDistributedSearch exten
   String ndouble = "n_d";
   String tdouble = "n_td";
   String nlong = "n_l";
-  String tlong = "n_tl";
+  String tlong = "other_tl1";
   String ndate = "n_dt";
   String tdate = "n_tdt";
   
@@ -95,10 +95,11 @@ public class TestDistributedSearch exten
 
     // these queries should be exactly ordered and scores should exactly match
     query("q","*:*", "sort",i1+" desc");
+    query("q","*:*", "sort","{!func}add("+i1+",5)"+" desc");
     query("q","*:*", "sort",i1+" asc");
     query("q","*:*", "sort",i1+" desc", "fl","*,score");
-    query("q","*:*", "sort",tlong+" asc", "fl","score");  // test legacy behavior - "score"=="*,score"
-    query("q","*:*", "sort",tlong+" desc");
+    query("q","*:*", "sort","n_tl1 asc", "fl","score");  // test legacy behavior - "score"=="*,score"
+    query("q","*:*", "sort","n_tl1 desc");
     handle.put("maxScore", SKIPVAL);
     query("q","{!func}"+i1);// does not expect maxScore. So if it comes ,ignore it. JavaBinCodec.writeSolrDocumentList()
     //is agnostic of request params.

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestGroupingSearch.java Wed Feb  9 09:35:27 2011
@@ -30,6 +30,10 @@ import java.util.*;
 
 public class TestGroupingSearch extends SolrTestCaseJ4 {
 
+  public static final String FOO_STRING_FIELD = "foo_s1";
+  public static final String SMALL_STRING_FIELD = "small_s1";
+  public static final String SMALL_INT_FIELD = "small_i";
+
   @BeforeClass
   public static void beforeTests() throws Exception {
     initCore("solrconfig.xml","schema12.xml");
@@ -376,9 +380,9 @@ public class TestGroupingSearch extends 
       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",ZERO_ONE, new IRange(0,indexSize)));
-      types.add(new FldType("foo_s",ZERO_ONE, new SVal('a','z',1,2)));
-      types.add(new FldType("small_s",ZERO_ONE, new SVal('a',(char)('c'+indexSize/10),1,1)));
-      types.add(new FldType("small_i",ZERO_ONE, new IRange(0,5+indexSize/10)));
+      types.add(new FldType(FOO_STRING_FIELD,ZERO_ONE, new SVal('a','z',1,2)));
+      types.add(new FldType(SMALL_STRING_FIELD,ZERO_ONE, new SVal('a',(char)('c'+indexSize/10),1,1)));
+      types.add(new FldType(SMALL_INT_FIELD,ZERO_ONE, new IRange(0,5+indexSize/10)));
 
       clearIndex();
       Map<Comparable, Doc> model = indexDocs(types, null, indexSize);
@@ -389,36 +393,36 @@ public class TestGroupingSearch extends 
         clearIndex();
         model.clear();
         Doc d1 = createDoc(types);
-        d1.getValues("small_s").set(0,"c");
-        d1.getValues("small_i").set(0,5);
+        d1.getValues(SMALL_STRING_FIELD).set(0,"c");
+        d1.getValues(SMALL_INT_FIELD).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.getValues(SMALL_STRING_FIELD).set(0,"b");
+        d1.getValues(SMALL_INT_FIELD).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.getValues(SMALL_STRING_FIELD).set(0,"c");
+        d1.getValues(SMALL_INT_FIELD).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.getValues(SMALL_STRING_FIELD).set(0,"c");
+        d1.getValues(SMALL_INT_FIELD).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.getValues(SMALL_STRING_FIELD).set(0,"b");
+        d1.getValues(SMALL_INT_FIELD).set(0,2);
         d1.order = 4;
         updateJ(toJSON(d1), params("commit","true"));
         model.put(d1.id, d1);
@@ -447,11 +451,11 @@ public class TestGroupingSearch extends 
         
          // Test specific case
         if (false) {
-          groupField="small_i";
-          sortComparator=createComparator(Arrays.asList(createComparator("small_s", true, true, false, true)));
-          sortStr = "small_s asc";
-          groupComparator = createComparator(Arrays.asList(createComparator("small_s", true, true, false, false)));
-          groupSortStr = "small_s asc";
+          groupField=SMALL_INT_FIELD;
+          sortComparator=createComparator(Arrays.asList(createComparator(SMALL_STRING_FIELD, true, true, false, true)));
+          sortStr = SMALL_STRING_FIELD + " asc";
+          groupComparator = createComparator(Arrays.asList(createComparator(SMALL_STRING_FIELD, true, true, false, false)));
+          groupSortStr = SMALL_STRING_FIELD + " asc";
           rows=1; start=0; group_offset=1; group_limit=1;
         }
 
@@ -526,8 +530,7 @@ public class TestGroupingSearch extends 
       Map<String,Object> resultSet = new LinkedHashMap<String,Object>();
       group.put("doclist", resultSet);
       resultSet.put("numFound", grp.docs.size());
-      resultSet.put("start", start);
-
+      resultSet.put("start", group_offset);
       List docs = new ArrayList();
       resultSet.put("docs", docs);
       for (int j=group_offset; j<grp.docs.size(); j++) {

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestPluginEnable.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestPluginEnable.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestPluginEnable.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestPluginEnable.java Wed Feb  9 09:35:27 2011
@@ -1,5 +1,22 @@
 package org.apache.solr;
 
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 import org.apache.solr.client.solrj.SolrServerException;
 import org.junit.BeforeClass;
 import org.junit.Test;

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestTrie.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestTrie.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestTrie.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/TestTrie.java Wed Feb  9 09:35:27 2011
@@ -41,6 +41,7 @@ public class TestTrie extends SolrTestCa
     initCore("solrconfig.xml","schema-trie.xml");
   }
   
+  @Override
   @After
   public void tearDown() throws Exception {
     clearIndex();

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/LengthFilterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/LengthFilterTest.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/LengthFilterTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/LengthFilterTest.java Wed Feb  9 09:35:27 2011
@@ -31,9 +31,19 @@ public class LengthFilterTest extends Ba
     Map<String, String> args = new HashMap<String, String>();
     args.put(LengthFilterFactory.MIN_KEY, String.valueOf(4));
     args.put(LengthFilterFactory.MAX_KEY, String.valueOf(10));
+    // default: args.put("enablePositionIncrements", "false");
     factory.init(args);
     String test = "foo foobar super-duper-trooper";
     TokenStream stream = factory.create(new WhitespaceTokenizer(DEFAULT_VERSION, new StringReader(test)));
-    assertTokenStreamContents(stream, new String[] { "foobar" });
+    assertTokenStreamContents(stream, new String[] { "foobar" }, new int[] { 1 });
+
+    factory = new LengthFilterFactory();
+    args = new HashMap<String, String>();
+    args.put(LengthFilterFactory.MIN_KEY, String.valueOf(4));
+    args.put(LengthFilterFactory.MAX_KEY, String.valueOf(10));
+    args.put("enablePositionIncrements", "true");
+    factory.init(args);
+    stream = factory.create(new WhitespaceTokenizer(DEFAULT_VERSION, new StringReader(test)));
+    assertTokenStreamContents(stream, new String[] { "foobar" }, new int[] { 2 });
   }
 }
\ No newline at end of file

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/SnowballPorterFilterFactoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/SnowballPorterFilterFactoryTest.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/SnowballPorterFilterFactoryTest.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/SnowballPorterFilterFactoryTest.java Wed Feb  9 09:35:27 2011
@@ -33,7 +33,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.ArrayList;
-import java.util.Collections;
 
 public class SnowballPorterFilterFactoryTest extends BaseTokenTestCase {
 
@@ -59,37 +58,6 @@ public class SnowballPorterFilterFactory
     assertTokenStreamContents(stream, gold);
   }
 
-  /**
-   * Tests the protected words mechanism of EnglishPorterFilterFactory
-   */
-  @Deprecated
-  public void testProtectedOld() throws Exception {
-    EnglishStemmer stemmer = new EnglishStemmer();
-    String[] test = {"The", "fledgling", "banks", "were", "counting", "on", "a", "big", "boom", "in", "banking"};
-    String[] gold = new String[test.length];
-    for (int i = 0; i < test.length; i++) {
-      if (test[i].equals("fledgling") == false && test[i].equals("banks") == false) {
-        stemmer.setCurrent(test[i]);
-        stemmer.stem();
-        gold[i] = stemmer.getCurrent();
-      } else {
-        gold[i] = test[i];
-      }
-    }
-
-    EnglishPorterFilterFactory factory = new EnglishPorterFilterFactory();
-    Map<String, String> args = new HashMap<String, String>(DEFAULT_VERSION_PARAM);
-    args.put(SnowballPorterFilterFactory.PROTECTED_TOKENS, "who-cares.txt");
-    factory.init(args);
-    List<String> lines = new ArrayList<String>();
-    Collections.addAll(lines, "banks", "fledgling");
-    factory.inform(new LinesMockSolrResourceLoader(lines));
-    Tokenizer tokenizer = new WhitespaceTokenizer(DEFAULT_VERSION,
-        new StringReader(StrUtils.join(Arrays.asList(test), ' ')));
-    TokenStream stream = factory.create(tokenizer);
-    assertTokenStreamContents(stream, gold);
-  }
-
   class LinesMockSolrResourceLoader implements ResourceLoader {
     List<String> lines;
 

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestMultiWordSynonyms.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestMultiWordSynonyms.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestMultiWordSynonyms.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestMultiWordSynonyms.java Wed Feb  9 09:35:27 2011
@@ -1,3 +1,20 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.solr.analysis;
 
 import org.apache.lucene.analysis.core.WhitespaceTokenizer;

Modified: lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestRemoveDuplicatesTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestRemoveDuplicatesTokenFilterFactory.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestRemoveDuplicatesTokenFilterFactory.java (original)
+++ lucene/dev/branches/docvalues/solr/src/test/org/apache/solr/analysis/TestRemoveDuplicatesTokenFilterFactory.java Wed Feb  9 09:35:27 2011
@@ -48,6 +48,7 @@ public class TestRemoveDuplicatesTokenFi
           CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
           OffsetAttribute offsetAtt = addAttribute(OffsetAttribute.class);
           PositionIncrementAttribute posIncAtt = addAttribute(PositionIncrementAttribute.class);
+          @Override
           public boolean incrementToken() {
             if (toks.hasNext()) {
               clearAttributes();