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 [28/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/java/org/apache/solr/response/BaseResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/BaseResponseWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/BaseResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/BaseResponseWriter.java Wed Feb  9 09:35:27 2011
@@ -302,12 +302,12 @@ public abstract class BaseResponseWriter
      * {@link SolrInputDocument}s to be spit out as a {@link SolrDocumentList}
      * so they can be processed as a whole, rather than on a doc-by-doc basis.
      * If set to false, this method calls
-     * {@link #writeAllDocs(DocListInfo, List)}, else if set to true, then this
+     * {@link #writeAllDocs(BaseResponseWriter.DocListInfo, List)}, else if set to true, then this
      * method forces calling {@link #writeDoc(SolrDocument)} on a doc-by-doc
      * basis. one
      * 
      * @return True to force {@link #writeDoc(SolrDocument)} to be called, False
-     *         to force {@link #writeAllDocs(DocListInfo, List)} to be called.
+     *         to force {@link #writeAllDocs(BaseResponseWriter.DocListInfo, List)} to be called.
      */
     public boolean isStreamingDocs() { return true; }
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/JSONResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/JSONResponseWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/JSONResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/JSONResponseWriter.java Wed Feb  9 09:35:27 2011
@@ -286,6 +286,7 @@ class JSONWriter extends TextResponseWri
   }
 
 
+  @Override
   public void writeNamedList(String name, NamedList val) throws IOException {
     if (val instanceof SimpleOrderedMap) {
       writeNamedListAsMapWithDups(name,val);
@@ -391,6 +392,7 @@ class JSONWriter extends TextResponseWri
     writeMapCloser();
   }
 
+  @Override
   public void writeSolrDocument(String name, SolrDocument doc, Set<String> returnFields, Map pseudoFields) throws IOException {
     writeMapOpener(-1); // no trivial way to determine map size
     // TODO: could easily figure out size for SolrDocument if needed...
@@ -437,6 +439,7 @@ class JSONWriter extends TextResponseWri
   // if a Doc can ever contain another doc, this optimization would have to go.
   private final HashMap scoreMap = new HashMap(1);
 
+  @Override
   public void writeDoc(String name, Document doc, Set<String> returnFields, float score, boolean includeScore) throws IOException {
     Map other = null;
     if (includeScore) {
@@ -446,6 +449,7 @@ class JSONWriter extends TextResponseWri
     writeDoc(name, doc.getFields(), returnFields, other);
   }
 
+  @Override
   public void writeDocList(String name, DocList ids, Set<String> fields, Map otherFields) throws IOException {
     boolean includeScore=false;
     if (fields!=null) {
@@ -595,6 +599,7 @@ class JSONWriter extends TextResponseWri
     writer.write(']');
   }
 
+  @Override
   public void writeStr(String name, String val, boolean needsEscaping) throws IOException {
     // it might be more efficient to use a stringbuilder or write substrings
     // if writing chars to the stream is slow.
@@ -647,6 +652,7 @@ class JSONWriter extends TextResponseWri
   }
 
 
+  @Override
   public void writeMap(String name, Map val, boolean excludeOuter, boolean isFirstVal) throws IOException {
     if (!excludeOuter) {
       writeMapOpener(val.size());
@@ -678,6 +684,7 @@ class JSONWriter extends TextResponseWri
     }
   }
 
+  @Override
   public void writeArray(String name, Iterator val) throws IOException {
     writeArrayOpener(-1); // no trivial way to determine array size
     incLevel();
@@ -697,30 +704,37 @@ class JSONWriter extends TextResponseWri
   //
   // Primitive types
   //
+  @Override
   public void writeNull(String name) throws IOException {
     writer.write("null");
   }
 
+  @Override
   public void writeInt(String name, String val) throws IOException {
     writer.write(val);
   }
 
+  @Override
   public void writeLong(String name, String val) throws IOException {
     writer.write(val);
   }
 
+  @Override
   public void writeBool(String name, String val) throws IOException {
     writer.write(val);
   }
 
+  @Override
   public void writeFloat(String name, String val) throws IOException {
     writer.write(val);
   }
 
+  @Override
   public void writeDouble(String name, String val) throws IOException {
     writer.write(val);
   }
 
+  @Override
   public void writeDate(String name, String val) throws IOException {
     writeStr(name, val, false);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PHPSerializedResponseWriter.java Wed Feb  9 09:35:27 2011
@@ -32,7 +32,8 @@ import org.apache.solr.schema.SchemaFiel
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
 import org.apache.solr.search.SolrIndexSearcher;
-
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
 /**
  * A description of the PHP serialization format can be found here:
  * http://www.hurring.com/scott/code/perl/serialize/
@@ -91,6 +92,7 @@ class PHPSerializedWriter extends JSONWr
     doIndent = false;
   }
 
+  @Override
   public void writeResponse() throws IOException {
     Boolean omitHeader = req.getParams().getBool(CommonParams.OMIT_HEADER);
     if(omitHeader != null && omitHeader) rsp.getValues().remove("responseHeader");
@@ -105,7 +107,8 @@ class PHPSerializedWriter extends JSONWr
   @Override
   public void writeDoc(String name, Collection<Fieldable> fields, Set<String> returnFields, Map pseudoFields) throws IOException {
     ArrayList<Fieldable> single = new ArrayList<Fieldable>();
-    HashMap<String, MultiValueField> multi = new HashMap<String, MultiValueField>();
+    LinkedHashMap<String, MultiValueField> multi 
+      = new LinkedHashMap<String, MultiValueField>();
 
     for (Fieldable ff : fields) {
       String fname = ff.name();
@@ -201,6 +204,96 @@ class PHPSerializedWriter extends JSONWr
   }
   
   @Override
+  public void writeSolrDocument(String name, SolrDocument doc, Set<String> returnFields, Map pseudoFields) throws IOException {
+    LinkedHashMap <String,Object> single = new LinkedHashMap<String, Object>();
+    LinkedHashMap <String,Object> multi = new LinkedHashMap<String, Object>();
+    int pseudoSize = pseudoFields != null ? pseudoFields.size() : 0;
+
+    for (String fname : doc.getFieldNames()) {
+      if(returnFields != null && !returnFields.contains(fname)){
+        continue;
+      }
+
+      Object val = doc.getFieldValue(fname);
+      SchemaField sf = schema.getFieldOrNull(fname);
+      if (sf != null && sf.multiValued()) {
+        multi.put(fname, val);
+      }else{
+        single.put(fname, val);
+      }
+    }
+
+    writeMapOpener(single.size() + multi.size() + pseudoSize);
+    for(String fname: single.keySet()){
+      Object val = single.get(fname);
+      writeKey(fname, true);
+      writeVal(fname, val);
+    }
+    
+    for(String fname: multi.keySet()){
+      writeKey(fname, true);
+
+      Object val = multi.get(fname);
+      if (!(val instanceof Collection)) {
+        // should never be reached if multivalued fields are stored as a Collection
+        // so I'm assuming a size of 1 just to wrap the single value
+        writeArrayOpener(1);
+        writeVal(fname, val);
+        writeArrayCloser();
+      }else{
+        writeVal(fname, val);
+      }
+    }
+
+    if (pseudoSize > 0) {
+      writeMap(null,pseudoFields,true, false);
+    }
+    writeMapCloser();
+  }
+
+
+  @Override
+  public void writeSolrDocumentList(String name, SolrDocumentList docs, Set<String> fields, Map otherFields) throws IOException {
+    boolean includeScore=false;
+    if (fields!=null) {
+      includeScore = fields.contains("score");
+      if (fields.size()==0 || (fields.size()==1 && includeScore) || fields.contains("*")) {
+        fields=null;  // null means return all stored fields
+      }
+    }
+
+    int sz = docs.size();
+
+    writeMapOpener(includeScore ? 4 : 3);
+
+    writeKey("numFound",false);
+    writeLong(null,docs.getNumFound());
+
+    writeKey("start",false);
+    writeLong(null,docs.getStart());
+
+    if (includeScore && docs.getMaxScore() != null) {
+      writeKey("maxScore",false);
+      writeFloat(null,docs.getMaxScore());
+    }
+
+    writeKey("docs",false);
+
+    writeArrayOpener(sz);
+    for (int i=0; i<sz; i++) {
+      writeKey(i, false);
+      writeSolrDocument(null, docs.get(i), fields, otherFields);
+    }
+    writeArrayCloser();
+
+    if (otherFields !=null) {
+      writeMap(null, otherFields, true, false);
+    }
+    writeMapCloser();
+  }
+
+  
+  @Override
   public void writeArray(String name, Object[] val) throws IOException {
     writeMapOpener(val.length);
     for(int i=0; i < val.length; i++) {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/PageTool.java Wed Feb  9 09:35:27 2011
@@ -73,6 +73,7 @@ public class PageTool {
     return current_page_number;
   }
 
+  @Override
   public String toString() {
     return "Found " + results_found +
            " Page " + current_page_number + " of " + page_count +

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RawResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RawResponseWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RawResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RawResponseWriter.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.response;
 
 import java.io.IOException;
+import java.io.OutputStream;
 import java.io.Reader;
 import java.io.Writer;
 
@@ -44,7 +45,7 @@ import org.apache.solr.request.SolrQuery
  * @version $Id$
  * @since solr 1.3
  */
-public class RawResponseWriter implements QueryResponseWriter 
+public class RawResponseWriter implements BinaryQueryResponseWriter 
 {
   /** 
    * The key that should be used to add a ContentStream to the 
@@ -93,4 +94,24 @@ public class RawResponseWriter implement
       getBaseWriter( request ).write( writer, request, response );
     }
   }
+
+public void write(OutputStream out, SolrQueryRequest request,
+		SolrQueryResponse response) throws IOException {
+    Object obj = response.getValues().get( CONTENT );
+    if( obj != null && (obj instanceof ContentStream ) ) {
+      // copy the contents to the writer...
+      ContentStream content = (ContentStream)obj;
+      java.io.InputStream in = content.getStream();
+      try {
+        IOUtils.copy( in, out );
+      } finally {
+        in.close();
+      }
+    }
+    else {
+      //getBaseWriter( request ).write( writer, request, response );
+    	throw new IOException("did not find a CONTENT object");
+    }
+	
+}
 }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RubyResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RubyResponseWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RubyResponseWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/RubyResponseWriter.java Wed Feb  9 09:35:27 2011
@@ -45,7 +45,9 @@ public class RubyResponseWriter implemen
 
 class RubyWriter extends NaNFloatWriter {
 
+  @Override
   protected String getNaN() { return "(0.0/0.0)"; }
+  @Override
   protected String getInf() { return "(1.0/0.0)"; }
 
   public RubyWriter(Writer writer, SolrQueryRequest req, SolrQueryResponse rsp) {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrParamResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrParamResourceLoader.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrParamResourceLoader.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrParamResourceLoader.java Wed Feb  9 09:35:27 2011
@@ -25,6 +25,7 @@ import org.apache.commons.collections.Ex
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -49,18 +50,26 @@ public class SolrParamResourceLoader ext
     }
   }
 
+  @Override
   public void init(ExtendedProperties extendedProperties) {
   }
 
+  @Override
   public InputStream getResourceStream(String s) throws ResourceNotFoundException {
     String template = templates.get(s);
-    return template == null ? null : new ByteArrayInputStream(template.getBytes());
+    try {
+      return template == null ? null : new ByteArrayInputStream(template.getBytes("UTF-8"));
+    } catch (UnsupportedEncodingException e) {
+      throw new RuntimeException(e); // may not happen
+    }
   }
 
+  @Override
   public boolean isSourceModified(Resource resource) {
     return false;
   }
 
+  @Override
   public long getLastModified(Resource resource) {
     return 0;
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrQueryResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrQueryResponse.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrQueryResponse.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrQueryResponse.java Wed Feb  9 09:35:27 2011
@@ -66,12 +66,12 @@ public class SolrQueryResponse {
    * @see #setAllValues
    * @see <a href="#returnable_data">Note on Returnable Data</a>
    */
-  protected NamedList values = new SimpleOrderedMap();
+  protected NamedList<Object> values = new SimpleOrderedMap<Object>();
 
   /**
    * Container for storing information that should be logged by Solr before returning.
    */
-  protected NamedList toLog = new SimpleOrderedMap();
+  protected NamedList<Object> toLog = new SimpleOrderedMap<Object>();
 
   protected Set<String> defaultReturnFields;
 
@@ -103,7 +103,7 @@ public class SolrQueryResponse {
    * Sets data to be returned in this response
    * @see <a href="#returnable_data">Note on Returnable Data</a>
    */
-  public void setAllValues(NamedList nameValuePairs) {
+  public void setAllValues(NamedList<Object> nameValuePairs) {
     values=nameValuePairs;
   }
 
@@ -189,7 +189,8 @@ public class SolrQueryResponse {
   }
   
   /** Repsonse header to be logged */ 
-  public NamedList getResponseHeader() {
+  public NamedList<Object> getResponseHeader() {
+    @SuppressWarnings("unchecked")
 	  SimpleOrderedMap<Object> header = (SimpleOrderedMap<Object>) values.get("responseHeader");
 	  return header;
   }
@@ -207,7 +208,7 @@ public class SolrQueryResponse {
    * 
    * @return things to log
    */
-  public NamedList getToLog() {
+  public NamedList<Object> getToLog() {
 	  return toLog;
   }
   

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrVelocityResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrVelocityResourceLoader.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrVelocityResourceLoader.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/SolrVelocityResourceLoader.java Wed Feb  9 09:35:27 2011
@@ -33,17 +33,21 @@ public class SolrVelocityResourceLoader 
     this.loader = loader;
   }
 
+  @Override
   public void init(ExtendedProperties extendedProperties) {
   }
 
+  @Override
   public InputStream getResourceStream(String template_name) throws ResourceNotFoundException {
     return loader.openResource(template_name);
   }
 
+  @Override
   public boolean isSourceModified(Resource resource) {
     return false;
   }
 
+  @Override
   public long getLastModified(Resource resource) {
     return 0;
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/XMLWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/XMLWriter.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/XMLWriter.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/response/XMLWriter.java Wed Feb  9 09:35:27 2011
@@ -436,6 +436,7 @@ public final class XMLWriter extends Tex
   }
 
 
+  @Override
   public void writeVal(String name, Object val) throws IOException {
 
     // if there get to be enough types, perhaps hashing on the type
@@ -494,6 +495,7 @@ public final class XMLWriter extends Tex
   // Generic compound types
   //
 
+  @Override
   public void writeNamedList(String name, NamedList val) throws IOException {
     int sz = val.size();
     startTag("lst", name, sz<=0);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java Wed Feb  9 09:35:27 2011
@@ -103,6 +103,7 @@ public abstract class AbstractSubTypeFie
   /**
    * Throws UnsupportedOperationException()
    */
+  @Override
   public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) {
     throw new UnsupportedOperationException();
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BCDIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BCDIntField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BCDIntField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BCDIntField.java Wed Feb  9 09:35:27 2011
@@ -30,9 +30,11 @@ import java.io.IOException;
  * @version $Id$
  */
 public class BCDIntField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -42,11 +44,13 @@ public class BCDIntField extends FieldTy
     throw new UnsupportedOperationException("ValueSource not implemented");
   }
 
+  @Override
   public String toInternal(String val) {
     // TODO? make sure each character is a digit?
     return BCDUtils.base10toBase10kSortableInt(val);
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -57,10 +61,12 @@ public class BCDIntField extends FieldTy
     return Integer.valueOf( toExternal(f) );
   }
 
+  @Override
   public String indexedToReadable(String indexedForm) {
     return BCDUtils.base10kSortableIntToBase10(indexedForm);
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeInt(name,toExternal(f));
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BinaryField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BinaryField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BinaryField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BinaryField.java Wed Feb  9 09:35:27 2011
@@ -33,19 +33,23 @@ public class BinaryField extends FieldTy
     return Base64.byteArrayToBase64(buf.array(), buf.position(), buf.limit()-buf.position());
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeStr(name, toBase64String(toObject(f)), false);
   }
 
+  @Override
   public SortField getSortField(SchemaField field, boolean top) {
     throw new RuntimeException("Cannot sort on a Binary field");
   }
 
 
+  @Override
   public String toExternal(Fieldable f) {
     return toBase64String(toObject(f));
   }
   
+  @Override
   public ByteBuffer toObject(Fieldable f) {
     return  ByteBuffer.wrap(f.getBinaryValue(), f.getBinaryOffset(), f.getBinaryLength() ) ;
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BoolField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BoolField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BoolField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/BoolField.java Wed Feb  9 09:35:27 2011
@@ -37,10 +37,13 @@ import java.io.IOException;
  * @version $Id$
  */
 public class BoolField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
+    field.checkSortability();
     return getStringSort(field,reverse);
   }
 
@@ -58,6 +61,7 @@ public class BoolField extends FieldType
   // handle single valued non-text fields (int,bool,etc) if needed.
 
   protected final static Analyzer boolAnalyzer = new SolrAnalyzer() {
+    @Override
     public TokenStreamInfo getStream(String fieldName, Reader reader) {
       Tokenizer tokenizer = new Tokenizer(reader) {
         final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
@@ -88,19 +92,23 @@ public class BoolField extends FieldType
   };
 
 
+  @Override
   public Analyzer getAnalyzer() {
     return boolAnalyzer;
   }
 
+  @Override
   public Analyzer getQueryAnalyzer() {
     return boolAnalyzer;
   }
 
+  @Override
   public String toInternal(String val) {
     char ch = (val!=null && val.length()>0) ? val.charAt(0) : 0;
     return (ch=='1' || ch=='t' || ch=='T') ? "T" : "F";
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -115,6 +123,7 @@ public class BoolField extends FieldType
     return term.bytes[0] == 'T';
   }
 
+  @Override
   public String indexedToReadable(String indexedForm) {
     char ch = indexedForm.charAt(0);
     return ch=='T' ? "true" : "false";
@@ -129,6 +138,7 @@ public class BoolField extends FieldType
     }
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeBool(name, f.stringValue().charAt(0) =='T');
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ByteField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ByteField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ByteField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ByteField.java Wed Feb  9 09:35:27 2011
@@ -33,12 +33,15 @@ import java.util.Map;
  * @version $Id$
  */
 public class ByteField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String, String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
   /////////////////////////////////////////////////////////////
+  @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
+    field.checkSortability();
     return new SortField(field.name, SortField.BYTE, reverse);
   }
 
@@ -47,6 +50,7 @@ public class ByteField extends FieldType
     return new ByteFieldSource( new ByteValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
 
@@ -75,4 +79,4 @@ public class ByteField extends FieldType
   public Byte toObject(Fieldable f) {
     return Byte.valueOf(toExternal(f));
   }
-}
\ No newline at end of file
+}

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DateField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DateField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DateField.java Wed Feb  9 09:35:27 2011
@@ -18,7 +18,7 @@
 package org.apache.solr.schema;
 
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.SortField;
 import org.apache.lucene.search.TermRangeQuery;
@@ -125,12 +125,14 @@ public class DateField extends FieldType
   // The easiest fix is to simply remove the 'Z' for the internal
   // format.
   
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
   protected static String NOW = "NOW";
   protected static char Z = 'Z';
   
+  @Override
   public String toInternal(String val) {
     return toInternal(parseMath(null, val));
   }
@@ -183,6 +185,7 @@ public class DateField extends FieldType
     return formatDate(val);
   }
 
+  @Override
   public String indexedToReadable(String indexedForm) {
     return indexedForm + Z;
   }
@@ -193,6 +196,7 @@ public class DateField extends FieldType
     out.write(Z);
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -211,6 +215,7 @@ public class DateField extends FieldType
     }
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -219,6 +224,7 @@ public class DateField extends FieldType
     return new OrdFieldSource(field.name);
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeDate(name, toExternal(f));
   }
@@ -336,6 +342,7 @@ public class DateField extends FieldType
       this.setTimeZone(CANONICAL_TZ);
     }
 
+    @Override
     public Date parse(String i, ParsePosition p) {
       /* delegate to SimpleDateFormat for easy stuff */
       Date d = super.parse(i, p);
@@ -357,6 +364,7 @@ public class DateField extends FieldType
       return d;
     }
 
+    @Override
     public StringBuffer format(Date d, StringBuffer toAppendTo,
                                FieldPosition pos) {
       /* delegate to SimpleDateFormat for easy stuff */
@@ -375,6 +383,7 @@ public class DateField extends FieldType
       return toAppendTo;
     }
 
+    @Override
     public Object clone() {
       ISO8601CanonicalDateFormat c
         = (ISO8601CanonicalDateFormat) super.clone();
@@ -391,6 +400,7 @@ public class DateField extends FieldType
       super();
       proto = d;
     }
+    @Override
     protected DateFormat initialValue() {
       return (DateFormat) proto.clone();
     }
@@ -423,34 +433,42 @@ class DateFieldSource extends FieldCache
     this.ft = ft;
   }
 
+  @Override
   public String description() {
     return "date(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    return new StringIndexDocValues(this, reader, field) {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    return new StringIndexDocValues(this, readerContext, field) {
+      @Override
       protected String toTerm(String readableValue) {
         // needed for frange queries to work properly
         return ft.toInternal(readableValue);
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)intVal(doc);
       }
 
+      @Override
       public int intVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord;
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)intVal(doc);
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)intVal(doc);
       }
 
+      @Override
       public String strVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         if (ord == 0) {
@@ -463,18 +481,21 @@ class DateFieldSource extends FieldCache
         }
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + intVal(doc);
       }
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof DateFieldSource
             && super.equals(o);
   }
 
   private static int hcode = DateFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + super.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DoubleField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DoubleField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DoubleField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/DoubleField.java Wed Feb  9 09:35:27 2011
@@ -33,12 +33,15 @@ import java.util.Map;
  * @version $Id$
  */
 public class DoubleField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String, String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
   /////////////////////////////////////////////////////////////
+  @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
+    field.checkSortability();
     return new SortField(field.name, SortField.DOUBLE, reverse);
   }
 
@@ -48,6 +51,7 @@ public class DoubleField extends FieldTy
     return new DoubleFieldSource( new DoubleValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ExternalFileField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ExternalFileField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ExternalFileField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ExternalFileField.java Wed Feb  9 09:35:27 2011
@@ -59,6 +59,7 @@ public class ExternalFileField extends F
   private IndexSchema schema;
   private float defVal;
 
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
     String ftypeS = getArg("valType", args);
@@ -74,14 +75,17 @@ public class ExternalFileField extends F
     this.schema = schema;
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public ValueSource getValueSource(SchemaField field, QParser parser) {
     // default key field to unique key
     SchemaField keyField = keyFieldName==null ? schema.getUniqueKeyField() : schema.getField(keyFieldName);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FieldType.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FieldType.java Wed Feb  9 09:35:27 2011
@@ -185,6 +185,7 @@ public abstract class FieldType extends 
     this.typeName = typeName;
   }
 
+  @Override
   public String toString() {
     return typeName + "{class=" + this.getClass().getName()
 //            + propertiesToString(properties)
@@ -390,6 +391,7 @@ public abstract class FieldType extends 
       this.maxChars=maxChars;
     }
 
+    @Override
     public TokenStreamInfo getStream(String fieldName, Reader reader) {
       Tokenizer ts = new Tokenizer(reader) {
         final char[] cbuf = new char[maxChars];
@@ -476,13 +478,17 @@ public abstract class FieldType extends 
   /**
    * Returns the SortField instance that should be used to sort fields
    * of this type.
+   * @see SchemaField#checkSortability
    */
   public abstract SortField getSortField(SchemaField field, boolean top);
 
   /**
-   * Utility usable by subclasses when they want to get basic String sorting.
+   * Utility usable by subclasses when they want to get basic String sorting 
+   * using common checks.
+   * @see SchemaField#checkSortability
    */
   protected SortField getStringSort(SchemaField field, boolean reverse) {
+    field.checkSortability();
     return Sorting.getStringSortField(field.name, reverse, field.sortMissingLast(),field.sortMissingFirst());
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FloatField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FloatField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FloatField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/FloatField.java Wed Feb  9 09:35:27 2011
@@ -32,11 +32,14 @@ import java.io.IOException;
  * @version $Id$
  */
 public class FloatField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
+    field.checkSortability();
     return new SortField(field.name,SortField.FLOAT, reverse);
   }
 
@@ -45,6 +48,7 @@ public class FloatField extends FieldTyp
     return new FloatFieldSource( new FloatValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IndexSchema.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IndexSchema.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IndexSchema.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IndexSchema.java Wed Feb  9 09:35:27 2011
@@ -20,7 +20,8 @@ package org.apache.solr.schema;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.search.Similarity;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.SimilarityProvider;
 import org.apache.lucene.queryParser.QueryParser;
 import org.apache.lucene.util.Version;
 import org.apache.solr.common.ResourceLoader;
@@ -98,7 +99,7 @@ public final class IndexSchema {
    * If the is stream is null, the resource loader will load the schema resource by name.
    * @see SolrResourceLoader#openSchema
    * By default, this follows the normal config path directory searching rules.
-   * @see Config#openResource
+   * @see SolrResourceLoader#openResource
    */
   public IndexSchema(SolrConfig solrConfig, String name, InputStream is) {
     this.solrConfig = solrConfig;
@@ -192,7 +193,7 @@ public final class IndexSchema {
   /**
    * Returns the Similarity used for this index
    */
-  public Similarity getSimilarity() { return similarityFactory.getSimilarity(); }
+  public SimilarityProvider getSimilarityProvider() { return similarityFactory.getSimilarityProvider(); }
 
   /**
    * Returns the SimilarityFactory used for this index
@@ -315,6 +316,7 @@ public final class IndexSchema {
       return analyzer!=null ? analyzer : getDynamicFieldType(fieldName).getAnalyzer();
     }
 
+    @Override
     public TokenStream tokenStream(String fieldName, Reader reader)
     {
       return getAnalyzer(fieldName).tokenStream(fieldName,reader);
@@ -496,8 +498,9 @@ public final class IndexSchema {
     Node node = (Node) xpath.evaluate("/schema/similarity", document, XPathConstants.NODE);
     if (node==null) {
       similarityFactory = new SimilarityFactory() {
-        public Similarity getSimilarity() {
-          return Similarity.getDefault();
+        @Override
+        public SimilarityProvider getSimilarityProvider() {
+          return IndexSearcher.getDefaultSimilarityProvider();
         }
       };
       log.debug("using default similarity");
@@ -509,10 +512,11 @@ public final class IndexSchema {
         similarityFactory = (SimilarityFactory)obj;
         similarityFactory.init(params);
       } else {
-        // just like always, assume it's a Similarlity and get a ClassCastException - reasonable error handling
+        // just like always, assume it's a SimilarityProvider and get a ClassCastException - reasonable error handling
         similarityFactory = new SimilarityFactory() {
-          public Similarity getSimilarity() {
-            return (Similarity) obj;
+          @Override
+          public SimilarityProvider getSimilarityProvider() {
+            return (SimilarityProvider) obj;
           }
         };
       }
@@ -945,6 +949,7 @@ public final class IndexSchema {
       return new SchemaField(prototype, name);
     }
 
+    @Override
     public String toString() {
       return prototype.toString();
     }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IntField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IntField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/IntField.java Wed Feb  9 09:35:27 2011
@@ -32,11 +32,14 @@ import java.io.IOException;
  * @version $Id$
  */
 public class IntField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
+    field.checkSortability();
     return new SortField(field.name,SortField.INT, reverse);
   }
 
@@ -45,6 +48,7 @@ public class IntField extends FieldType 
     return new IntFieldSource(new IntValuesCreator( field.name, null, CachedArrayCreator.CACHE_VALUES_AND_BITS ) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String s = f.stringValue();
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LatLonType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LatLonType.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LatLonType.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LatLonType.java Wed Feb  9 09:35:27 2011
@@ -19,7 +19,7 @@ package org.apache.solr.schema;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
 import org.apache.lucene.spatial.DistanceUtils;
 import org.apache.lucene.spatial.tier.InvalidGeoException;
@@ -27,7 +27,6 @@ import org.apache.lucene.util.Bits;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.SolrIndexReader;
 import org.apache.solr.search.SpatialOptions;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.ValueSource;
@@ -342,8 +341,8 @@ class SpatialDistanceQuery extends Query
 
     public SpatialWeight(IndexSearcher searcher) throws IOException {
       this.searcher = searcher;
-      this.latContext = latSource.newContext();
-      this.lonContext = lonSource.newContext();
+      this.latContext = latSource.newContext(searcher);
+      this.lonContext = lonSource.newContext(searcher);
       latSource.createWeight(latContext, searcher);
       lonSource.createWeight(lonContext, searcher);
     }
@@ -371,18 +370,13 @@ class SpatialDistanceQuery extends Query
     }
 
     @Override
-    public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
-      return new SpatialScorer(getSimilarity(searcher), reader, this);
+    public Scorer scorer(AtomicReaderContext context, ScorerContext scorerContext) throws IOException {
+      return new SpatialScorer(context, this);
     }
 
     @Override
-    public Explanation explain(IndexReader reader, int doc) throws IOException {
-      SolrIndexReader topReader = (SolrIndexReader)reader;
-      SolrIndexReader[] subReaders = topReader.getLeafReaders();
-      int[] offsets = topReader.getLeafOffsets();
-      int readerPos = SolrIndexReader.readerIndex(doc, offsets);
-      int readerBase = offsets[readerPos];
-      return ((SpatialScorer)scorer(subReaders[readerPos], true, true)).explain(doc-readerBase);
+    public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
+      return ((SpatialScorer)scorer(context, ScorerContext.def().scoreDocsInOrder(true).topScorer(true))).explain(doc);
     }
   }
 
@@ -410,15 +404,15 @@ class SpatialDistanceQuery extends Query
     int lastDistDoc;
     double lastDist;
 
-    public SpatialScorer(Similarity similarity, IndexReader reader, SpatialWeight w) throws IOException {
-      super(similarity);
+    public SpatialScorer(AtomicReaderContext readerContext, SpatialWeight w) throws IOException {
+      super(w);
       this.weight = w;
       this.qWeight = w.getValue();
-      this.reader = reader;
+      this.reader = readerContext.reader;
       this.maxDoc = reader.maxDoc();
-      this.delDocs = reader.hasDeletions() ? MultiFields.getDeletedDocs(reader) : null;
-      latVals = latSource.getValues(weight.latContext, reader);
-      lonVals = lonSource.getValues(weight.lonContext, reader);
+      this.delDocs = reader.getDeletedDocs();
+      latVals = latSource.getValues(weight.latContext, readerContext);
+      lonVals = lonSource.getValues(weight.lonContext, readerContext);
 
       this.lonMin = SpatialDistanceQuery.this.lonMin;
       this.lonMax = SpatialDistanceQuery.this.lonMax;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LongField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LongField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LongField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/LongField.java Wed Feb  9 09:35:27 2011
@@ -32,14 +32,16 @@ import java.util.Map;
  * @version $Id$
  */
 public class LongField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
   /////////////////////////////////////////////////////////////
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
-
+    field.checkSortability();
     return new SortField(field.name,SortField.LONG, reverse);
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/RandomSortField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/RandomSortField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/RandomSortField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/RandomSortField.java Wed Feb  9 09:35:27 2011
@@ -22,12 +22,13 @@ import java.util.Map;
 
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.ValueSource;
-import org.apache.solr.search.SolrIndexReader;
 
 /**
  * Utility Field used for random sorting.  It should not be passed a value.
@@ -77,19 +78,13 @@ public class RandomSortField extends Fie
    * Given a field name and an IndexReader, get a random hash seed.  
    * Using dynamic fields, you can force the random order to change 
    */
-  private static int getSeed(String fieldName, IndexReader r) {
-    SolrIndexReader top = (SolrIndexReader)r;
-    int base=0;
-    while (top.getParent() != null) {
-      base += top.getBase();
-      top = top.getParent();
-    }
-
+  private static int getSeed(String fieldName, AtomicReaderContext context) {
+    final IndexReader top = ReaderUtil.getTopLevelContext(context).reader;
     // calling getVersion() on a segment will currently give you a null pointer exception, so
     // we use the top-level reader.
-    return fieldName.hashCode() + base + (int)top.getVersion();
+    return fieldName.hashCode() + context.docBase + (int)top.getVersion();
   }
-
+  
   @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
     return new SortField(field.getName(), randomComparatorSource, reverse);
@@ -105,33 +100,40 @@ public class RandomSortField extends Fie
 
 
   private static FieldComparatorSource randomComparatorSource = new FieldComparatorSource() {
+    @Override
     public FieldComparator newComparator(final String fieldname, final int numHits, int sortPos, boolean reversed) throws IOException {
       return new FieldComparator() {
         int seed;
         private final int[] values = new int[numHits];
         int bottomVal;
 
+        @Override
         public int compare(int slot1, int slot2) {
           return values[slot1] - values[slot2];  // values will be positive... no overflow possible.
         }
 
+        @Override
         public void setBottom(int slot) {
           bottomVal = values[slot];
         }
 
+        @Override
         public int compareBottom(int doc) throws IOException {
           return bottomVal - hash(doc+seed);
         }
 
+        @Override
         public void copy(int slot, int doc) throws IOException {
           values[slot] = hash(doc+seed);
         }
 
-        public FieldComparator setNextReader(IndexReader reader, int docBase) throws IOException {
-          seed = getSeed(fieldname, reader);
+        @Override
+        public FieldComparator setNextReader(AtomicReaderContext context) throws IOException {
+          seed = getSeed(fieldname, context);
           return this;
         }
 
+        @Override
         public Comparable value(int slot) {
           return values[slot];
         }
@@ -154,9 +156,9 @@ public class RandomSortField extends Fie
     }
 
     @Override
-    public DocValues getValues(Map context, final IndexReader reader) throws IOException {
+    public DocValues getValues(Map context, final AtomicReaderContext readerContext) throws IOException {
       return new DocValues() {
-          private final int seed = getSeed(field, reader);
+          private final int seed = getSeed(field, readerContext);
           @Override
           public float floatVal(int doc) {
             return (float)hash(doc+seed);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SchemaField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SchemaField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SchemaField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SchemaField.java Wed Feb  9 09:35:27 2011
@@ -17,9 +17,12 @@
 
 package org.apache.solr.schema;
 
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.document.Fieldable;
 import org.apache.lucene.search.SortField;
+
 import org.apache.solr.response.TextResponseWriter;
 
 import java.util.Map;
@@ -120,10 +123,35 @@ public final class SchemaField extends F
     type.write(writer,name,val);
   }
 
+  /**
+   * Delegates to the FieldType for this field
+   * @see FieldType#getSortField
+   */
   public SortField getSortField(boolean top) {
     return type.getSortField(this, top);
   }
 
+  /** 
+   * Sanity checks that the properties of this field type are plausible 
+   * for a field that may be used in sorting, throwing an appropraite 
+   * exception (including hte field name) if it is not.  FieldType subclasses 
+   * can choose to call this method in their getSortField implementation
+   * @see FieldType#getSortField
+   */
+  public void checkSortability() throws SolrException {
+    if (! indexed() ) {
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
+                              "can not sort on unindexed field: " 
+                              + getName());
+    }
+    if ( multiValued() ) {
+      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
+                              "can not sort on multivalued field: " 
+                              + getName());
+    }
+    
+  }
+
 
   static SchemaField create(String name, FieldType ft, Map<String,String> props) {
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ShortField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ShortField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ShortField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/ShortField.java Wed Feb  9 09:35:27 2011
@@ -35,14 +35,16 @@ import java.util.Map;
  *
  **/
 public class ShortField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String, String> args) {
     restrictProps(SORT_MISSING_FIRST | SORT_MISSING_LAST);
   }
 
   /////////////////////////////////////////////////////////////
 
+  @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
-
+    field.checkSortability();
     return new SortField(field.name, SortField.SHORT, reverse);
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SimilarityFactory.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SimilarityFactory.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SimilarityFactory.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@ package org.apache.solr.schema;
  * limitations under the License.
  */
 
-import org.apache.lucene.search.Similarity;
+import org.apache.lucene.search.SimilarityProvider;
 import org.apache.solr.common.params.SolrParams;
 
 public abstract class SimilarityFactory {
@@ -25,5 +25,5 @@ public abstract class SimilarityFactory 
   public void init(SolrParams params) { this.params = params; }
   public SolrParams getParams() { return params; }
 
-  public abstract Similarity getSimilarity();
+  public abstract SimilarityProvider getSimilarityProvider();
 }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableDoubleField.java Wed Feb  9 09:35:27 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -37,11 +37,16 @@ import java.util.Map;
 import java.io.IOException;
 /**
  * @version $Id$
+ * 
+ * @deprecated use {@link DoubleField} or {@link TrieDoubleField} - will be removed in 5.x
  */
+@Deprecated
 public class SortableDoubleField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -51,10 +56,12 @@ public class SortableDoubleField extends
     return new SortableDoubleFieldSource(field.name);
   }
 
+  @Override
   public String toInternal(String val) {
     return NumberUtils.double2sortableStr(val);
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -64,6 +71,7 @@ public class SortableDoubleField extends
     return NumberUtils.SortableStr2double(f.stringValue());
   }
   
+  @Override
   public String indexedToReadable(String indexedForm) {
     return NumberUtils.SortableStr2doubleStr(indexedForm);
   }
@@ -74,6 +82,7 @@ public class SortableDoubleField extends
     out.write( indexedToReadable(ByteUtils.UTF8toUTF16(input)) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String sval = f.stringValue();
     writer.writeDouble(name, NumberUtils.SortableStr2double(sval));
@@ -95,41 +104,50 @@ class SortableDoubleFieldSource extends 
     this.defVal = defVal;
   }
 
+  @Override
   public String description() {
     return "sdouble(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final double def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
+      @Override
       protected String toTerm(String readableValue) {
         return NumberUtils.double2sortableStr(readableValue);
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)doubleVal(doc);
       }
 
+      @Override
       public int intVal(int doc) {
         return (int)doubleVal(doc);
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)doubleVal(doc);
       }
 
+      @Override
       public double doubleVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord==0 ? def  : NumberUtils.SortableStr2double(termsIndex.lookup(ord, spare));
       }
 
+      @Override
       public String strVal(int doc) {
         return Double.toString(doubleVal(doc));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + doubleVal(doc);
       }
@@ -160,6 +178,7 @@ class SortableDoubleFieldSource extends 
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof SortableDoubleFieldSource
             && super.equals(o)
@@ -167,6 +186,7 @@ class SortableDoubleFieldSource extends 
   }
 
   private static int hcode = SortableDoubleFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     long bits = Double.doubleToLongBits(defVal);
     int ibits = (int)(bits ^ (bits>>>32));  // mix upper bits into lower.

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableFloatField.java Wed Feb  9 09:35:27 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -37,11 +37,16 @@ import java.util.Map;
 import java.io.IOException;
 /**
  * @version $Id$
+ * 
+ * @deprecated use {@link FloatField} or {@link TrieFloatField} - will be removed in 5.x
  */
+@Deprecated
 public class SortableFloatField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -51,10 +56,12 @@ public class SortableFloatField extends 
     return new SortableFloatFieldSource(field.name);
   }
 
+  @Override
   public String toInternal(String val) {
     return NumberUtils.float2sortableStr(val);
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -64,6 +71,7 @@ public class SortableFloatField extends 
     return NumberUtils.SortableStr2float(f.stringValue());
   }
   
+  @Override
   public String indexedToReadable(String indexedForm) {
     return NumberUtils.SortableStr2floatStr(indexedForm);
   }
@@ -74,6 +82,7 @@ public class SortableFloatField extends 
     out.write( indexedToReadable(ByteUtils.UTF8toUTF16(input)) );
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String sval = f.stringValue();
     writer.writeFloat(name, NumberUtils.SortableStr2float(sval));
@@ -95,41 +104,50 @@ class SortableFloatFieldSource extends F
     this.defVal = defVal;
   }
 
+    @Override
     public String description() {
     return "sfloat(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final float def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
+      @Override
       protected String toTerm(String readableValue) {
         return NumberUtils.float2sortableStr(readableValue);
       }
 
+      @Override
       public float floatVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord==0 ? def  : NumberUtils.SortableStr2float(termsIndex.lookup(ord, spare));
       }
 
+      @Override
       public int intVal(int doc) {
         return (int)floatVal(doc);
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)floatVal(doc);
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)floatVal(doc);
       }
 
+      @Override
       public String strVal(int doc) {
         return Float.toString(floatVal(doc));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + floatVal(doc);
       }
@@ -160,6 +178,7 @@ class SortableFloatFieldSource extends F
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof SortableFloatFieldSource
             && super.equals(o)
@@ -167,6 +186,7 @@ class SortableFloatFieldSource extends F
   }
 
   private static int hcode = SortableFloatFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + super.hashCode() + Float.floatToIntBits(defVal);
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableIntField.java Wed Feb  9 09:35:27 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -37,11 +37,16 @@ import java.util.Map;
 import java.io.IOException;
 /**
  * @version $Id$
+ * 
+ * @deprecated use {@link IntField} or {@link TrieIntField} - will be removed in 5.x
  */
+@Deprecated
 public class SortableIntField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -51,6 +56,7 @@ public class SortableIntField extends Fi
     return new SortableIntFieldSource(field.name);
   }
 
+  @Override
   public String toInternal(String val) {
     // special case single digits?  years?, etc
     // stringCache?  general stringCache on a
@@ -58,10 +64,12 @@ public class SortableIntField extends Fi
     return NumberUtils.int2sortableStr(val);
   }
 
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
 
+  @Override
   public String indexedToReadable(String indexedForm) {
     return NumberUtils.SortableStr2int(indexedForm);
   }
@@ -77,6 +85,7 @@ public class SortableIntField extends Fi
     return NumberUtils.SortableStr2int(f.stringValue(), 0, 3);    
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String sval = f.stringValue();
     writer.writeInt(name, NumberUtils.SortableStr2int(sval,0,sval.length()));
@@ -97,41 +106,50 @@ class SortableIntFieldSource extends Fie
     this.defVal = defVal;
   }
 
+  @Override
   public String description() {
     return "sint(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final int def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
+      @Override
       protected String toTerm(String readableValue) {
         return NumberUtils.int2sortableStr(readableValue);
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)intVal(doc);
       }
 
+      @Override
       public int intVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord==0 ? def  : NumberUtils.SortableStr2int(termsIndex.lookup(ord, spare),0,3);
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)intVal(doc);
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)intVal(doc);
       }
 
+      @Override
       public String strVal(int doc) {
         return Integer.toString(intVal(doc));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + intVal(doc);
       }
@@ -163,6 +181,7 @@ class SortableIntFieldSource extends Fie
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof SortableIntFieldSource
             && super.equals(o)
@@ -170,6 +189,7 @@ class SortableIntFieldSource extends Fie
   }
 
   private static int hcode = SortableIntFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + super.hashCode() + defVal;
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/SortableLongField.java Wed Feb  9 09:35:27 2011
@@ -28,7 +28,7 @@ import org.apache.solr.search.function.F
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.StringIndexDocValues;
 import org.apache.lucene.document.Fieldable;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.solr.util.ByteUtils;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.response.TextResponseWriter;
@@ -37,11 +37,16 @@ import java.util.Map;
 import java.io.IOException;
 /**
  * @version $Id$
+ * 
+ * @deprecated use {@link LongField} or {@link TrieLongField} - will be removed in 5.x
  */
+@Deprecated
 public class SortableLongField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
@@ -51,10 +56,12 @@ public class SortableLongField extends F
     return new SortableLongFieldSource(field.name);
   }
 
+  @Override
   public String toInternal(String val) {
     return NumberUtils.long2sortableStr(val);
   }
 
+  @Override
   public String indexedToReadable(String indexedForm) {
     return NumberUtils.SortableStr2long(indexedForm);
   }
@@ -65,6 +72,7 @@ public class SortableLongField extends F
     out.write( indexedToReadable(ByteUtils.UTF8toUTF16(input)) );
   }
   
+  @Override
   public String toExternal(Fieldable f) {
     return indexedToReadable(f.stringValue());
   }
@@ -74,6 +82,7 @@ public class SortableLongField extends F
     return NumberUtils.SortableStr2long(f.stringValue(),0,5);
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     String sval = f.stringValue();
     writer.writeLong(name, NumberUtils.SortableStr2long(sval,0,sval.length()));
@@ -96,41 +105,50 @@ class SortableLongFieldSource extends Fi
     this.defVal = defVal;
   }
 
+  @Override
   public String description() {
     return "slong(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final long def = defVal;
 
-    return new StringIndexDocValues(this, reader, field) {
+    return new StringIndexDocValues(this, readerContext, field) {
       private final BytesRef spare = new BytesRef();
 
+      @Override
       protected String toTerm(String readableValue) {
         return NumberUtils.long2sortableStr(readableValue);
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)longVal(doc);
       }
 
+      @Override
       public int intVal(int doc) {
         return (int)longVal(doc);
       }
 
+      @Override
       public long longVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord==0 ? def  : NumberUtils.SortableStr2long(termsIndex.lookup(ord, spare),0,5);
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)longVal(doc);
       }
 
+      @Override
       public String strVal(int doc) {
         return Long.toString(longVal(doc));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + longVal(doc);
       }
@@ -161,6 +179,7 @@ class SortableLongFieldSource extends Fi
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof SortableLongFieldSource
             && super.equals(o)
@@ -168,6 +187,7 @@ class SortableLongFieldSource extends Fi
   }
 
   private static int hcode = SortableLongFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + super.hashCode() + (int)defVal;
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrField.java Wed Feb  9 09:35:27 2011
@@ -31,18 +31,22 @@ import java.io.IOException;
  * @version $Id$
  */
 public class StrField extends FieldType {
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     super.init(schema, args);    
   }
 
+  @Override
   public SortField getSortField(SchemaField field,boolean reverse) {
     return getStringSort(field,reverse);
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeStr(name, f.stringValue(), true);
   }
 
+  @Override
   public ValueSource getValueSource(SchemaField field, QParser parser) {
     return new StrFieldSource(field.getName());
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/StrFieldSource.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.schema;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.search.function.DocValues;
 import org.apache.solr.search.function.FieldCacheSource;
@@ -32,41 +32,51 @@ public class StrFieldSource extends Fiel
     super(field);
   }
 
+  @Override
   public String description() {
     return "str(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    return new StringIndexDocValues(this, reader, field) {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    return new StringIndexDocValues(this, readerContext, field) {
+      @Override
       protected String toTerm(String readableValue) {
         return readableValue;
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)intVal(doc);
       }
 
+      @Override
       public int intVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         return ord;
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)intVal(doc);
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)intVal(doc);
       }
 
+      @Override
       public int ordVal(int doc) {
         return termsIndex.getOrd(doc);
       }
 
+      @Override
       public int numOrd() {
         return termsIndex.numOrd();
       }
 
+      @Override
       public String strVal(int doc) {
         int ord=termsIndex.getOrd(doc);
         if (ord == 0) {
@@ -76,18 +86,21 @@ public class StrFieldSource extends Fiel
         }
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + strVal(doc);
       }
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o instanceof StrFieldSource
             && super.equals(o);
   }
 
   private static int hcode = SortableFloatFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + super.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TextField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TextField.java Wed Feb  9 09:35:27 2011
@@ -49,6 +49,7 @@ import java.io.StringReader;
 public class TextField extends FieldType {
   protected boolean autoGeneratePhraseQueries = true;
 
+  @Override
   protected void init(IndexSchema schema, Map<String,String> args) {
     properties |= TOKENIZED;
     if (schema.getVersion()> 1.1f) properties &= ~OMIT_TF_POSITIONS;
@@ -62,10 +63,13 @@ public class TextField extends FieldType
     return autoGeneratePhraseQueries;
   }
 
+  @Override
   public SortField getSortField(SchemaField field, boolean reverse) {
+    /* :TODO: maybe warn if isTokenized(), but doesn't use LimitTokenCountFilter in it's chain? */
     return getStringSort(field, reverse);
   }
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     writer.writeStr(name, f.stringValue(), true);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieDateField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieDateField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieDateField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieDateField.java Wed Feb  9 09:35:27 2011
@@ -78,6 +78,7 @@ public class TrieDateField extends DateF
 
   @Override
   public SortField getSortField(SchemaField field, boolean top) {
+    field.checkSortability();
     return new SortField(new LongValuesCreator( field.getName(), FieldCache.NUMERIC_UTILS_LONG_PARSER, CachedArrayCreator.CACHE_VALUES_AND_BITS ), top);
   }
 

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieField.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieField.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/schema/TrieField.java Wed Feb  9 09:35:27 2011
@@ -121,7 +121,10 @@ public class TrieField extends FieldType
     }
   }
 
+  @Override
   public SortField getSortField(SchemaField field, boolean top) {
+    field.checkSortability();
+
     int flags = CachedArrayCreator.CACHE_VALUES_AND_BITS;
     Object missingValue = null;
     boolean sortMissingLast  = on( SORT_MISSING_LAST,  properties );
@@ -194,6 +197,7 @@ public class TrieField extends FieldType
   }
 
 
+  @Override
   public void write(TextResponseWriter writer, String name, Fieldable f) throws IOException {
     byte[] arr = f.getBinaryValue();
     if (arr==null) {
@@ -586,6 +590,7 @@ class TrieDateFieldSource extends LongFi
     super(creator);
   }
 
+  @Override
   public String description() {
     return "date(" + field + ')';
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BitDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BitDocSet.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BitDocSet.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BitDocSet.java Wed Feb  9 09:35:27 2011
@@ -113,15 +113,18 @@ public class BitDocSet extends DocSetBas
    *
    * @return the <b>internal</b> OpenBitSet that should <b>not</b> be modified.
    */
+  @Override
   public OpenBitSet getBits() {
     return bits;
   }
 
+  @Override
   public void add(int doc) {
     bits.set(doc);
     size=-1;  // invalidate size
   }
 
+  @Override
   public void addUnique(int doc) {
     bits.set(doc);
     size=-1;  // invalidate size

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BoostQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BoostQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BoostQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/BoostQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -43,12 +43,14 @@ public class BoostQParserPlugin extends 
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new QParser(qstr, localParams, params, req) {
       QParser baseParser;
       ValueSource vs;
       String b;
 
+      @Override
       public Query parse() throws ParseException {
         b = localParams.get(BOOSTFUNC);
         baseParser = subQuery(localParams.get(QueryParsing.V), null);
@@ -65,14 +67,17 @@ public class BoostQParserPlugin extends 
       }
 
 
+      @Override
       public String[] getDefaultHighlightFields() {
         return baseParser.getDefaultHighlightFields();
       }
                                            
+      @Override
       public Query getHighlightQuery() throws ParseException {
         return baseParser.getHighlightQuery();
       }
 
+      @Override
       public void addDebugInfo(NamedList<Object> debugInfo) {
         // encapsulate base debug info in a sub-list?
         baseParser.addDebugInfo(debugInfo);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParser.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParser.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParser.java Wed Feb  9 09:35:27 2011
@@ -79,6 +79,7 @@ public class DisMaxQParser extends QPars
   protected QParser altQParser;
 
 
+  @Override
   public Query parse() throws ParseException {
     SolrParams solrParams = localParams == null ? params : new DefaultSolrParams(localParams, params);
     queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF));
@@ -244,6 +245,7 @@ public class DisMaxQParser extends QPars
     return parsedUserQuery == null ? altUserQuery : parsedUserQuery;
   }
 
+  @Override
   public void addDebugInfo(NamedList<Object> debugInfo) {
     super.addDebugInfo(debugInfo);
     debugInfo.add("altquerystring", altUserQuery);

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParserPlugin.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParserPlugin.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DisMaxQParserPlugin.java Wed Feb  9 09:35:27 2011
@@ -115,6 +115,7 @@ public class DisMaxQParserPlugin extends
   public void init(NamedList args) {
   }
 
+  @Override
   public QParser createParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
     return new DisMaxQParser(qstr, localParams, params, req);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSet.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSet.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/DocSet.java Wed Feb  9 09:35:27 2011
@@ -23,6 +23,7 @@ import org.apache.lucene.search.DocIdSet
 import org.apache.lucene.search.Filter;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 
@@ -151,6 +152,7 @@ public interface DocSet /* extends Colle
 abstract class DocSetBase implements DocSet {
 
   // Not implemented efficiently... for testing purposes only
+  @Override
   public boolean equals(Object obj) {
     if (!(obj instanceof DocSet)) return false;
     DocSet other = (DocSet)obj;
@@ -246,21 +248,19 @@ abstract class DocSetBase implements Doc
 
     return new Filter() {
       @Override
-      public DocIdSet getDocIdSet(IndexReader reader) throws IOException {
-        int offset = 0;
-        SolrIndexReader r = (SolrIndexReader)reader;
-        while (r.getParent() != null) {
-          offset += r.getBase();
-          r = r.getParent();
-        }
+      public DocIdSet getDocIdSet(AtomicReaderContext context) throws IOException {
+        IndexReader reader = context.reader;
 
-        if (r==reader) return bs;
+        if (context.isTopLevel) {
+          return bs;
+        }
 
-        final int base = offset;
+        final int base = context.docBase;
         final int maxDoc = reader.maxDoc();
         final int max = base + maxDoc;   // one past the max doc in this segment.
 
         return new DocIdSet() {
+          @Override
           public DocIdSetIterator iterator() throws IOException {
             return new DocIdSetIterator() {
               int pos=base-1;