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 [30/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/search/function/ConstValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ConstValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ConstValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ConstValueSource.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 import java.util.Map;
@@ -34,37 +34,47 @@ public class ConstValueSource extends Co
     this.dv = constant;
   }
 
+  @Override
   public String description() {
     return "const(" + constant + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return constant;
       }
+      @Override
       public int intVal(int doc) {
         return (int)constant;
       }
+      @Override
       public long longVal(int doc) {
         return (long)constant;
       }
+      @Override
       public double doubleVal(int doc) {
         return dv;
       }
+      @Override
       public String strVal(int doc) {
         return Float.toString(constant);
       }
+      @Override
       public String toString(int doc) {
         return description();
       }
     };
   }
 
+  @Override
   public int hashCode() {
     return Float.floatToIntBits(constant) * 31;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (!(o instanceof ConstValueSource)) return false;
     ConstValueSource other = (ConstValueSource)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DivFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DivFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DivFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DivFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -28,10 +28,12 @@ public class DivFloatFunction extends Du
     super(a,b);
   }
 
+  @Override
   protected String name() {
     return "div";
   }
 
+  @Override
   protected float func(int doc, DocValues aVals, DocValues bVals) {
     return aVals.floatVal(doc) / bVals.floatVal(doc);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocFreqValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocFreqValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocFreqValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DocFreqValueSource.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.util.BytesRef;
@@ -45,21 +45,27 @@ class ConstIntDocValues extends DocValue
     this.parent = parent;
   }
 
+  @Override
   public float floatVal(int doc) {
     return fval;
   }
+  @Override
   public int intVal(int doc) {
     return ival;
   }
+  @Override
   public long longVal(int doc) {
     return lval;
   }
+  @Override
   public double doubleVal(int doc) {
     return dval;
   }
+  @Override
   public String strVal(int doc) {
     return sval;
   }
+  @Override
   public String toString(int doc) {
     return parent.description() + '=' + sval;
   }
@@ -82,21 +88,27 @@ class ConstDoubleDocValues extends DocVa
     this.parent = parent;
   }
 
+  @Override
   public float floatVal(int doc) {
     return fval;
   }
+  @Override
   public int intVal(int doc) {
     return ival;
   }
+  @Override
   public long longVal(int doc) {
     return lval;
   }
+  @Override
   public double doubleVal(int doc) {
     return dval;
   }
+  @Override
   public String strVal(int doc) {
     return sval;
   }
+  @Override
   public String toString(int doc) {
     return parent.description() + '=' + sval;
   }
@@ -239,7 +251,7 @@ public class DocFreqValueSource extends 
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     IndexSearcher searcher = (IndexSearcher)context.get("searcher");
     int docfreq = searcher.docFreq(new Term(indexedField, indexedBytes));
     return new ConstIntDocValues(docfreq, this);
@@ -250,10 +262,12 @@ public class DocFreqValueSource extends 
     context.put("searcher",searcher);
   }
 
+  @Override
   public int hashCode() {
     return getClass().hashCode() + indexedField.hashCode()*29 + indexedBytes.hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (this.getClass() != o.getClass()) return false;
     DocFreqValueSource other = (DocFreqValueSource)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleConstValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleConstValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleConstValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleConstValueSource.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 import java.util.Map;
@@ -33,43 +33,53 @@ public class DoubleConstValueSource exte
     this.lv = (long)constant;
   }
 
+  @Override
   public String description() {
     return "const(" + constant + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return fv;
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) lv;
       }
 
+      @Override
       public long longVal(int doc) {
         return lv;
       }
 
+      @Override
       public double doubleVal(int doc) {
         return constant;
       }
 
+      @Override
       public String strVal(int doc) {
         return Double.toString(constant);
       }
 
+      @Override
       public String toString(int doc) {
         return description();
       }
     };
   }
 
+  @Override
   public int hashCode() {
     long bits = Double.doubleToRawLongBits(constant);
     return (int)(bits ^ (bits >>> 32));
   }
 
+  @Override
   public boolean equals(Object o) {
     if (!(o instanceof DoubleConstValueSource)) return false;
     DoubleConstValueSource other = (DoubleConstValueSource) o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DoubleFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.search.cache.DoubleValuesCreator;
 import org.apache.lucene.search.cache.CachedArray.DoubleValues;
@@ -41,36 +42,44 @@ public class DoubleFieldSource extends N
     super(creator);
   }
 
+  @Override
   public String description() {
     return "double(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DoubleValues vals = cache.getDoubles(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DoubleValues vals = cache.getDoubles(readerContext.reader, field, creator);
     final double[] arr = vals.values;
 	final Bits valid = vals.valid;
     
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return (float) arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long) arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Double.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + doubleVal(doc);
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DualFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DualFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DualFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/DualFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -39,29 +39,37 @@ public abstract class DualFloatFunction 
   protected abstract String name();
   protected abstract float func(int doc, DocValues aVals, DocValues bVals);
 
+  @Override
   public String description() {
     return name() + "(" + a.description() + "," + b.description() + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues aVals =  a.getValues(context, reader);
-    final DocValues bVals =  b.getValues(context, reader);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues aVals =  a.getValues(context, readerContext);
+    final DocValues bVals =  b.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
 	return func(doc, aVals, bVals);
       }
+      @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 floatVal(doc);
       }
+      @Override
       public String strVal(int doc) {
         return Float.toString(floatVal(doc));
       }
+      @Override
       public String toString(int doc) {
 	return name() + '(' + aVals.toString(doc) + ',' + bVals.toString(doc) + ')';
       }
@@ -74,6 +82,7 @@ public abstract class DualFloatFunction 
     b.createWeight(context,searcher);
   }
 
+  @Override
   public int hashCode() {
     int h = a.hashCode();
     h ^= (h << 13) | (h >>> 20);
@@ -83,6 +92,7 @@ public abstract class DualFloatFunction 
     return h;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (this.getClass() != o.getClass()) return false;
     DualFloatFunction other = (DualFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FieldCacheSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FieldCacheSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FieldCacheSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FieldCacheSource.java Wed Feb  9 09:35:27 2011
@@ -37,10 +37,12 @@ public abstract class FieldCacheSource e
     return cache;
   }
 
+  @Override
   public String description() {
     return field;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (!(o instanceof FieldCacheSource)) return false;
     FieldCacheSource other = (FieldCacheSource)o;
@@ -48,6 +50,7 @@ public abstract class FieldCacheSource e
            && this.cache == other.cache;
   }
 
+  @Override
   public int hashCode() {
     return cache.hashCode() + field.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FileFloatSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FileFloatSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FileFloatSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FileFloatSource.java Wed Feb  9 09:35:27 2011
@@ -18,15 +18,17 @@ package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.DocsEnum;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.index.IndexReader.ReaderContext;
 import org.apache.lucene.index.TermsEnum;
 import org.apache.lucene.index.MultiFields;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.lucene.util.StringHelper;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.schema.SchemaField;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.search.QParser;
-import org.apache.solr.search.SolrIndexReader;
 import org.apache.solr.util.VersionedFile;
 
 import java.io.*;
@@ -51,50 +53,52 @@ public class FileFloatSource extends Val
     this.dataDir = parser.getReq().getCore().getDataDir();
   }
 
+  @Override
   public String description() {
     return "float(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     int offset = 0;
-    if (reader instanceof SolrIndexReader) {
-      SolrIndexReader r = (SolrIndexReader)reader;
-      while (r.getParent() != null) {
-        offset += r.getBase();
-        r = r.getParent();
-      }
-      reader = r;
-    }
+    ReaderContext topLevelContext = ReaderUtil.getTopLevelContext(readerContext);
     final int off = offset;
 
-    final float[] arr = getCachedFloats(reader);
+    final float[] arr = getCachedFloats(topLevelContext.reader);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return arr[doc + off];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int)arr[doc + off];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)arr[doc + off];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)arr[doc + off];
       }
 
+      @Override
       public String strVal(int doc) {
         return Float.toString(arr[doc + off]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + floatVal(doc);
       }
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     if (o.getClass() !=  FileFloatSource.class) return false;
     FileFloatSource other = (FileFloatSource)o;
@@ -104,10 +108,12 @@ public class FileFloatSource extends Val
             && this.dataDir.equals(other.dataDir);
   }
 
+  @Override
   public int hashCode() {
     return FileFloatSource.class.hashCode() + field.getName().hashCode();
   };
 
+  @Override
   public String toString() {
     return "FileFloatSource(field="+field.getName()+",keyField="+keyField.getName()
             + ",defVal="+defVal+",dataDir="+dataDir+")";
@@ -119,6 +125,7 @@ public class FileFloatSource extends Val
   }
 
   static Cache floatCache = new Cache() {
+    @Override
     protected Object createValue(IndexReader reader, Object key) {
       return getFloats(((Entry)key).ffs, reader);
     }
@@ -178,12 +185,14 @@ public class FileFloatSource extends Val
       this.ffs = ffs;
     }
 
+    @Override
     public boolean equals(Object o) {
       if (!(o instanceof Entry)) return false;
       Entry other = (Entry)o;
       return ffs.equals(other.ffs);
     }
 
+    @Override
     public int hashCode() {
       return ffs.hashCode();
     }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FloatFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FloatFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FloatFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FloatFieldSource.java Wed Feb  9 09:35:27 2011
@@ -20,7 +20,7 @@ package org.apache.solr.search.function;
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.search.cache.FloatValuesCreator;
 import org.apache.lucene.search.cache.CachedArray.FloatValues;
@@ -41,36 +41,44 @@ public class FloatFieldSource extends Nu
     super(creator);
   }
 
+  @Override
   public String description() {
     return "float(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final FloatValues vals = cache.getFloats(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final FloatValues vals = cache.getFloats(readerContext.reader, field, creator);
     final float[] arr = vals.values;
 	final Bits valid = vals.valid;
     
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int)arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Float.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + floatVal(doc);
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FunctionQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FunctionQuery.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FunctionQuery.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/FunctionQuery.java Wed Feb  9 09:35:27 2011
@@ -18,10 +18,10 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
 import org.apache.lucene.index.MultiFields;
 import org.apache.lucene.util.Bits;
-import org.apache.solr.search.SolrIndexReader;
 
 import java.io.IOException;
 import java.util.Set;
@@ -67,7 +67,7 @@ public class FunctionQuery extends Query
 
     public FunctionWeight(IndexSearcher searcher) throws IOException {
       this.searcher = searcher;
-      this.context = func.newContext();
+      this.context = func.newContext(searcher);
       func.createWeight(context, searcher);
     }
 
@@ -94,18 +94,13 @@ public class FunctionQuery extends Query
     }
 
     @Override
-    public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder, boolean topScorer) throws IOException {
-      return new AllScorer(getSimilarity(searcher), reader, this);
+    public Scorer scorer(AtomicReaderContext context, ScorerContext scorerContext) throws IOException {
+      return new AllScorer(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 ((AllScorer)scorer(subReaders[readerPos], true, true)).explain(doc-readerBase);
+    public Explanation explain(AtomicReaderContext context, int doc) throws IOException {
+      return ((AllScorer)scorer(context, ScorerContext.def().scoreDocsInOrder(true).topScorer(true))).explain(doc);
     }
   }
 
@@ -119,16 +114,16 @@ public class FunctionQuery extends Query
     final boolean hasDeletions;
     final Bits delDocs;
 
-    public AllScorer(Similarity similarity, IndexReader reader, FunctionWeight w) throws IOException {
-      super(similarity);
+    public AllScorer(AtomicReaderContext context, FunctionWeight w) throws IOException {
+      super(w);
       this.weight = w;
       this.qWeight = w.getValue();
-      this.reader = reader;
+      this.reader = context.reader;
       this.maxDoc = reader.maxDoc();
       this.hasDeletions = reader.hasDeletions();
       this.delDocs = MultiFields.getDeletedDocs(reader);
       assert !hasDeletions || delDocs != null;
-      vals = func.getValues(weight.context, reader);
+      vals = func.getValues(weight.context, context);
     }
 
     @Override

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IDFValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IDFValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IDFValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IDFValueSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.*;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Similarity;
 import org.apache.lucene.util.BytesRef;
@@ -38,9 +39,9 @@ public class IDFValueSource extends DocF
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     IndexSearcher searcher = (IndexSearcher)context.get("searcher");
-    Similarity sim = searcher.getSimilarity();
+    Similarity sim = searcher.getSimilarityProvider().get(field);
     // todo: we need docFreq that takes a BytesRef
     String strVal = ByteUtils.UTF8toUTF16(indexedBytes);
     int docfreq = searcher.docFreq(new Term(indexedField, strVal));

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IntFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IntFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IntFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/IntFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.Bits;
 import org.apache.solr.search.MutableValueInt;
 import org.apache.solr.search.MutableValue;
@@ -40,39 +41,47 @@ public class IntFieldSource extends Nume
     super(creator);
   }
 
+  @Override
   public String description() {
     return "int(" + field + ')';
   }
 
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final IntValues vals = cache.getInts(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final IntValues vals = cache.getInts(readerContext.reader, field, creator);
     final int[] arr = vals.values;
 	final Bits valid = vals.valid;
     
     return new DocValues() {
       final MutableValueInt val = new MutableValueInt();
       
+      @Override
       public float floatVal(int doc) {
         return (float)arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long)arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double)arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Float.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + intVal(doc);
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/JoinDocFreqValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/JoinDocFreqValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/JoinDocFreqValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/JoinDocFreqValueSource.java Wed Feb  9 09:35:27 2011
@@ -21,10 +21,11 @@ import java.io.IOException;
 import java.util.Map;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.FieldCache.DocTerms;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.search.SolrIndexReader;
 
 /**
  * Use a field value and find the Document Frequency within another field.
@@ -42,29 +43,21 @@ public class JoinDocFreqValueSource exte
     this.qfield = qfield;
   }
 
+  @Override
   public String description() {
     return NAME + "(" + field +":("+qfield+"))";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException 
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException 
   {
-    final DocTerms terms = cache.getTerms(reader, field, true );
-    
-    int offset = 0;
-    IndexReader topReader = reader;
-    if (topReader instanceof SolrIndexReader) {
-      SolrIndexReader r = (SolrIndexReader)topReader;
-      while (r.getParent() != null) {
-        offset += r.getBase();
-        r = r.getParent();
-      }
-      topReader = r;
-    }
-    final IndexReader top = topReader;
+    final DocTerms terms = cache.getTerms(readerContext.reader, field, true );
+    final IndexReader top = ReaderUtil.getTopLevelContext(readerContext).reader;
     
     return new DocValues() {
       BytesRef ref = new BytesRef();
 
+      @Override
       public int intVal(int doc) 
       {
         try {
@@ -78,28 +71,34 @@ public class JoinDocFreqValueSource exte
         }
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float)intVal(doc);
       }
 
+      @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 intVal(doc) + "";
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + intVal(doc);
       }
     };
   }
   
+  @Override
   public boolean equals(Object o) {
     if (o.getClass() !=  JoinDocFreqValueSource.class) return false;
     JoinDocFreqValueSource other = (JoinDocFreqValueSource)o;
@@ -107,6 +106,7 @@ public class JoinDocFreqValueSource exte
     return super.equals(other);
   }
 
+  @Override
   public int hashCode() {
     return qfield.hashCode() + super.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LinearFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LinearFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LinearFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LinearFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -42,28 +42,36 @@ public class LinearFloatFunction extends
     this.intercept = intercept;
   }
   
+  @Override
   public String description() {
     return slope + "*float(" + source.description() + ")+" + intercept;
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals =  source.getValues(context, reader);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues vals =  source.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return vals.floatVal(doc) * slope + intercept;
       }
+      @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 slope + "*float(" + vals.toString(doc) + ")+" + intercept;
       }
@@ -75,6 +83,7 @@ public class LinearFloatFunction extends
     source.createWeight(context, searcher);
   }
 
+  @Override
   public int hashCode() {
     int h = Float.floatToIntBits(slope);
     h = (h >>> 2) | (h << 30);
@@ -83,6 +92,7 @@ public class LinearFloatFunction extends
     return h + source.hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (LinearFloatFunction.class != o.getClass()) return false;
     LinearFloatFunction other = (LinearFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LiteralValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LiteralValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LiteralValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LiteralValueSource.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@ package org.apache.solr.search.function;
  * limitations under the License.
  */
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.util.Map;
 import java.io.IOException;
@@ -38,7 +38,7 @@ public class LiteralValueSource extends 
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
 
     return new DocValues() {
       @Override

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LongFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LongFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LongFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/LongFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.search.cache.LongValuesCreator;
 import org.apache.lucene.search.cache.CachedArray.LongValues;
@@ -42,6 +43,7 @@ public class LongFieldSource extends Num
     super(creator);
   }
 
+  @Override
   public String description() {
     return "long(" + field + ')';
   }
@@ -50,32 +52,39 @@ public class LongFieldSource extends Num
     return Long.parseLong(extVal);
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final LongValues vals = cache.getLongs(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final LongValues vals = cache.getLongs(readerContext.reader, field, creator);
     final long[] arr = vals.values;
 	final Bits valid = vals.valid;
     
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return (float) arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Long.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + longVal(doc);
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxDocValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxDocValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxDocValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxDocValueSource.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@
  */
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -38,7 +38,7 @@ public class MaxDocValueSource extends V
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     IndexSearcher searcher = (IndexSearcher)context.get("searcher");
     return new ConstIntDocValues(searcher.maxDoc(), this);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MaxFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -41,29 +41,37 @@ public class MaxFloatFunction extends Va
     this.fval = fval;
   }
   
+  @Override
   public String description() {
     return "max(" + source.description() + "," + fval + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals =  source.getValues(context, reader);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues vals =  source.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
 	float v = vals.floatVal(doc);
         return v < fval ? fval : v;
       }
+      @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 "max(" + vals.toString(doc) + "," + fval + ")";
       }
@@ -75,12 +83,14 @@ public class MaxFloatFunction extends Va
     source.createWeight(context, searcher);
   }
 
+  @Override
   public int hashCode() {
     int h = Float.floatToIntBits(fval);
     h = (h >>> 2) | (h << 30);
     return h + source.hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (MaxFloatFunction.class != o.getClass()) return false;
     MaxFloatFunction other = (MaxFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MultiFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MultiFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MultiFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/MultiFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -16,7 +16,7 @@ package org.apache.solr.search.function;
  * limitations under the License.
  */
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.util.Map;
@@ -38,6 +38,7 @@ public abstract class MultiFloatFunction
   abstract protected String name();
   abstract protected float func(int doc, DocValues[] valsArr);
 
+  @Override
   public String description() {
     StringBuilder sb = new StringBuilder();
     sb.append(name()).append('(');
@@ -54,28 +55,35 @@ public abstract class MultiFloatFunction
     return sb.toString();
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     final DocValues[] valsArr = new DocValues[sources.length];
     for (int i=0; i<sources.length; i++) {
-      valsArr[i] = sources[i].getValues(context, reader);
+      valsArr[i] = sources[i].getValues(context, readerContext);
     }
 
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return func(doc, valsArr);
       }
+      @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) {
         StringBuilder sb = new StringBuilder();
         sb.append(name()).append('(');
@@ -100,10 +108,12 @@ public abstract class MultiFloatFunction
       source.createWeight(context, searcher);
   }
 
+  @Override
   public int hashCode() {
     return Arrays.hashCode(sources) + name().hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (this.getClass() != o.getClass()) return false;
     MultiFloatFunction other = (MultiFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NormValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NormValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NormValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NormValueSource.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Similarity;
 import java.io.IOException;
@@ -44,10 +44,10 @@ public class NormValueSource extends Val
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     IndexSearcher searcher = (IndexSearcher)context.get("searcher");
-    final Similarity similarity = searcher.getSimilarity();
-    final byte[] norms = reader.norms(field);
+    final Similarity similarity = searcher.getSimilarityProvider().get(field);
+    final byte[] norms = readerContext.reader.norms(field);
     if (norms == null) {
       return new ConstDoubleDocValues(0.0, this);
     }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumDocsValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumDocsValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumDocsValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumDocsValueSource.java Wed Feb  9 09:35:27 2011
@@ -16,8 +16,8 @@
  */
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
-import org.apache.solr.search.SolrIndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.util.ReaderUtil;
 
 import java.io.IOException;
 import java.util.Map;
@@ -33,11 +33,9 @@ public class NumDocsValueSource extends 
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
     // Searcher has no numdocs so we must use the reader instead
-    SolrIndexReader topReader = (SolrIndexReader)reader;
-    while (topReader.getParent() != null) topReader = topReader.getParent();
-    return new ConstIntDocValues(topReader.numDocs(), this);
+    return new ConstIntDocValues(ReaderUtil.getTopLevelContext(readerContext).reader.numDocs(), this);
   }
 
   @Override

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumericFieldCacheSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumericFieldCacheSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumericFieldCacheSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/NumericFieldCacheSource.java Wed Feb  9 09:35:27 2011
@@ -32,6 +32,7 @@ public abstract class NumericFieldCacheS
     this.creator = creator;
   }
 
+  @Override
   public final boolean equals(Object o) {
     if (o.getClass() != this.getClass()) return false;
     NumericFieldCacheSource other = (NumericFieldCacheSource) o;
@@ -40,6 +41,7 @@ public abstract class NumericFieldCacheS
             this.creator.getClass() == other.creator.getClass();
   }
 
+  @Override
   public final int hashCode() {
     int h = creator == null ? this.getClass().hashCode() : creator.getClass().hashCode();
     h += super.hashCode();

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/OrdFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,9 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
+import org.apache.lucene.search.FieldCache;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.search.MutableValue;
 import org.apache.solr.search.MutableValueInt;
 
@@ -49,46 +52,59 @@ public class OrdFieldSource extends Valu
     this.field = field;
   }
 
+  @Override
   public String description() {
     return "ord(" + 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 {
+    final int off = readerContext.docBase;
+    final IndexReader topReader = ReaderUtil.getTopLevelContext(readerContext).reader;
+    final FieldCache.DocTermsIndex sindex = FieldCache.DEFAULT.getTermsIndex(topReader, field);
+    return new DocValues() {
       protected String toTerm(String readableValue) {
         return readableValue;
       }
       
+      @Override
       public float floatVal(int doc) {
-        return (float)termsIndex.getOrd(doc);
+        return (float)sindex.getOrd(doc+off);
       }
 
+      @Override
       public int intVal(int doc) {
-        return termsIndex.getOrd(doc);
+        return sindex.getOrd(doc+off);
       }
 
+      @Override
       public long longVal(int doc) {
-        return (long)termsIndex.getOrd(doc);
+        return (long)sindex.getOrd(doc+off);
       }
 
+      @Override
       public double doubleVal(int doc) {
-        return (double)termsIndex.getOrd(doc);
+        return (double)sindex.getOrd(doc+off);
       }
 
+      @Override
       public int ordVal(int doc) {
-        return termsIndex.getOrd(doc);
+        return sindex.getOrd(doc+off);
       }
 
+      @Override
       public int numOrd() {
-        return termsIndex.numOrd();
+        return sindex.numOrd();
       }
 
+      @Override
       public String strVal(int doc) {
         // the string value of the ordinal, not the string itself
-        return Integer.toString(termsIndex.getOrd(doc));
+        return Integer.toString(sindex.getOrd(doc+off));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + intVal(doc);
       }
@@ -105,7 +121,7 @@ public class OrdFieldSource extends Valu
 
           @Override
           public void fillValue(int doc) {
-            mval.value = termsIndex.getOrd(doc);
+            mval.value = sindex.getOrd(doc);
             mval.exists = mval.value!=0;
           }
         };
@@ -113,11 +129,13 @@ public class OrdFieldSource extends Valu
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     return o.getClass() == OrdFieldSource.class && this.field.equals(((OrdFieldSource)o).field);
   }
 
   private static final int hcode = OrdFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + field.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/PowFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/PowFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/PowFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/PowFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -28,10 +28,12 @@ public class PowFloatFunction extends Du
     super(a,b);
   }
 
+  @Override
   protected String name() {
     return "pow";
   }
 
+  @Override
   protected float func(int doc, DocValues aVals, DocValues bVals) {
     return (float)Math.pow(aVals.floatVal(doc), bVals.floatVal(doc));
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ProductFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ProductFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ProductFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ProductFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -25,10 +25,12 @@ public class ProductFloatFunction extend
     super(sources);
   }
 
+  @Override
   protected String name() {
     return "product";
   }
 
+  @Override
   protected float func(int doc, DocValues[] valsArr) {
     float val = 1.0f;
     for (DocValues vals : valsArr) {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/QueryValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/QueryValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/QueryValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/QueryValueSource.java Wed Feb  9 09:35:27 2011
@@ -18,7 +18,10 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.*;
+import org.apache.lucene.search.Weight.ScorerContext;
+import org.apache.lucene.util.ReaderUtil;
 import org.apache.solr.common.SolrException;
 
 import java.io.IOException;
@@ -39,19 +42,22 @@ public class QueryValueSource extends Va
   public Query getQuery() { return q; }
   public float getDefaultValue() { return defVal; }
 
+  @Override
   public String description() {
     return "query(" + q + ",def=" + defVal + ")";
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    return new QueryDocValues(reader, q, defVal, context==null ? null : (Weight)context.get(this));
+  public DocValues getValues(Map fcontext, AtomicReaderContext readerContext) throws IOException {
+    return new QueryDocValues(readerContext, q, defVal, fcontext);
   }
 
+  @Override
   public int hashCode() {
     return q.hashCode() * 29;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (QueryValueSource.class != o.getClass()) return false;
     QueryValueSource other = (QueryValueSource)o;
@@ -68,9 +74,11 @@ public class QueryValueSource extends Va
 
 class QueryDocValues extends DocValues {
   final Query q;
-  final IndexReader reader;
+//  final IndexReader reader;
+  final AtomicReaderContext readerContext;
   final Weight weight;
   final float defVal;
+  final Map fcontext;
 
   Scorer scorer;
   int scorerDoc; // the document the scorer is on
@@ -78,19 +86,37 @@ class QueryDocValues extends DocValues {
   // the last document requested... start off with high value
   // to trigger a scorer reset on first access.
   int lastDocRequested=Integer.MAX_VALUE;
+  
 
-  public QueryDocValues(IndexReader reader, Query q, float defVal, Weight w) throws IOException {
-    this.reader = reader;
+  public QueryDocValues(AtomicReaderContext readerContext, Query q, float defVal, Map fcontext) throws IOException {
+    IndexReader reader = readerContext.reader;
+    this.readerContext = readerContext;
     this.q = q;
     this.defVal = defVal;
-    weight = w!=null ? w : q.weight(new IndexSearcher(reader));
+    this.fcontext = fcontext;
+
+    Weight w = fcontext==null ? null : (Weight)fcontext.get(q);
+    // TODO: sort by function doesn't weight (SOLR-1297 is open because of this bug)... so weightSearcher will currently be null
+    if (w == null) {
+      IndexSearcher weightSearcher;
+      if(fcontext == null) {
+        weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext));
+      } else {
+        weightSearcher = (IndexSearcher)fcontext.get("searcher");
+        if (weightSearcher == null) {
+          weightSearcher = new IndexSearcher(ReaderUtil.getTopLevelContext(readerContext));
+        }
+      }
+      w = q.weight(weightSearcher);
+    }
+    weight = w;
   }
 
+  @Override
   public float floatVal(int doc) {
     try {
       if (doc < lastDocRequested) {
-        // out-of-order access.... reset scorer.
-        scorer = weight.scorer(reader, true, false);
+        scorer = weight.scorer(readerContext, ScorerContext.def());
         if (scorer==null) return defVal;
         scorerDoc = -1;
       }
@@ -113,18 +139,23 @@ class QueryDocValues extends DocValues {
     }
   }  
 
+  @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 "query(" + q + ",def=" + defVal + ")=" + floatVal(doc);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/RangeMapFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -46,29 +46,37 @@ public class RangeMapFloatFunction exten
     this.defaultVal = def;
   }
 
+  @Override
   public String description() {
     return "map(" + source.description() + "," + min + "," + max + "," + target + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals =  source.getValues(context, reader);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues vals =  source.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         float val = vals.floatVal(doc);
         return (val>=min && val<=max) ? target : (defaultVal == null ? val : defaultVal);
       }
+      @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 "map(" + vals.toString(doc) + ",min=" + min + ",max=" + max + ",target=" + target + ")";
       }
@@ -80,6 +88,7 @@ public class RangeMapFloatFunction exten
     source.createWeight(context, searcher);
   }
 
+  @Override
   public int hashCode() {
     int h = source.hashCode();
     h ^= (h << 10) | (h >>> 23);
@@ -93,6 +102,7 @@ public class RangeMapFloatFunction exten
     return h;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (RangeMapFloatFunction.class != o.getClass()) return false;
     RangeMapFloatFunction other = (RangeMapFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReciprocalFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReciprocalFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReciprocalFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReciprocalFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
 
 import java.io.IOException;
@@ -57,24 +57,31 @@ public class ReciprocalFloatFunction ext
     this.b=b;
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals = source.getValues(context, reader);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues vals = source.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
         return a/(m*vals.floatVal(doc) + b);
       }
+      @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 Float.toString(a) + "/("
                 + m + "*float(" + vals.toString(doc) + ')'
@@ -88,18 +95,21 @@ public class ReciprocalFloatFunction ext
     source.createWeight(context, searcher);
   }
 
+  @Override
   public String description() {
     return Float.toString(a) + "/("
            + m + "*float(" + source.description() + ")"
            + "+" + b + ')';
   }
 
+  @Override
   public int hashCode() {
     int h = Float.floatToIntBits(a) + Float.floatToIntBits(m);
     h ^= (h << 13) | (h >>> 20);
     return h + (Float.floatToIntBits(b)) + source.hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (ReciprocalFloatFunction.class != o.getClass()) return false;
     ReciprocalFloatFunction other = (ReciprocalFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ReverseOrdFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,7 +18,9 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.FieldCache;
+import org.apache.lucene.util.ReaderUtil;
 
 import java.io.IOException;
 import java.util.Map;
@@ -51,51 +53,64 @@ public class ReverseOrdFieldSource exten
     this.field = field;
   }
 
+  @Override
   public String description() {
     return "rord("+field+')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final FieldCache.DocTermsIndex sindex = FieldCache.DEFAULT.getTermsIndex(reader, field);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final IndexReader topReader = ReaderUtil.getTopLevelContext(readerContext).reader;
+    final int off = readerContext.docBase;
 
+    final FieldCache.DocTermsIndex sindex = FieldCache.DEFAULT.getTermsIndex(topReader, field);
     final int end = sindex.numOrd();
 
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
-        return (float)(end - sindex.getOrd(doc));
+        return (float)(end - sindex.getOrd(doc+off));
       }
 
+      @Override
       public int intVal(int doc) {
-        return (end - sindex.getOrd(doc));
+        return (end - sindex.getOrd(doc+off));
       }
 
+      @Override
       public long longVal(int doc) {
-        return (long)(end - sindex.getOrd(doc));
+        return (long)(end - sindex.getOrd(doc+off));
       }
 
+      @Override
       public int ordVal(int doc) {
-        return (end - sindex.getOrd(doc));
+        return (end - sindex.getOrd(doc+off));
       }
 
+      @Override
       public int numOrd() {
         return end;
       }
 
+      @Override
       public double doubleVal(int doc) {
-        return (double)(end - sindex.getOrd(doc));
+        return (double)(end - sindex.getOrd(doc+off));
       }
 
+      @Override
       public String strVal(int doc) {
         // the string value of the ordinal, not the string itself
-        return Integer.toString((end - sindex.getOrd(doc)));
+        return Integer.toString((end - sindex.getOrd(doc+off)));
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + strVal(doc);
       }
     };
   }
 
+  @Override
   public boolean equals(Object o) {
     if (o.getClass() !=  ReverseOrdFieldSource.class) return false;
     ReverseOrdFieldSource other = (ReverseOrdFieldSource)o;
@@ -103,6 +118,7 @@ public class ReverseOrdFieldSource exten
   }
 
   private static final int hcode = ReverseOrdFieldSource.class.hashCode();
+  @Override
   public int hashCode() {
     return hcode + field.hashCode();
   };

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ScaleFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ScaleFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ScaleFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ScaleFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,8 +17,9 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.util.ReaderUtil;
 
 import java.io.IOException;
 import java.util.Map;
@@ -45,28 +46,27 @@ public class ScaleFloatFunction extends 
     this.max = max;
   }
 
+  @Override
   public String description() {
     return "scale(" + source.description() + "," + min + "," + max + ")";
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals =  source.getValues(context, reader);
-    int maxDoc = reader.maxDoc();
-
-    // this doesn't take into account deleted docs!
-    float minVal=0.0f;
-    float maxVal=0.0f;
+  private static class ScaleInfo {
+    float minVal;
+    float maxVal;
+  }
 
-    if (maxDoc>0) {
-      minVal = maxVal = vals.floatVal(0);      
-    }
+  private ScaleInfo createScaleInfo(Map context, AtomicReaderContext readerContext) throws IOException {
+    final AtomicReaderContext[] leaves = ReaderUtil.leaves(ReaderUtil.getTopLevelContext(readerContext));
 
-    // Traverse the complete set of values to get the min and the max.
-    // Future alternatives include being able to ask a DocValues for min/max
-    // Another memory-intensive option is to cache the values in
-    // a float[] on this first pass.
+    float minVal = Float.POSITIVE_INFINITY;
+    float maxVal = Float.NEGATIVE_INFINITY;
+
+    for (AtomicReaderContext leaf : leaves) {
+      int maxDoc = leaf.reader.maxDoc();
+      DocValues vals =  source.getValues(context, leaf);
+      for (int i=0; i<maxDoc; i++) {
 
-    for (int i=0; i<maxDoc; i++) {
       float val = vals.floatVal(i);
       if ((Float.floatToRawIntBits(val) & (0xff<<23)) == 0xff<<23) {
         // if the exponent in the float is all ones, then this is +Inf, -Inf or NaN
@@ -75,31 +75,61 @@ public class ScaleFloatFunction extends 
       }
       if (val < minVal) {
         minVal = val;
-      } else if (val > maxVal) {
+      }
+      if (val > maxVal) {
         maxVal = val;
       }
     }
+    }
+
+    if (minVal == Float.POSITIVE_INFINITY) {
+    // must have been an empty index
+      minVal = maxVal = 0;
+    }
 
-    final float scale = (maxVal-minVal==0) ? 0 : (max-min)/(maxVal-minVal);
-    final float minSource = minVal;
-    final float maxSource = maxVal;
+    ScaleInfo scaleInfo = new ScaleInfo();
+    scaleInfo.minVal = minVal;
+    scaleInfo.maxVal = maxVal;
+    context.put(this.source, scaleInfo);
+    return scaleInfo;
+  }
+
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+
+    ScaleInfo scaleInfo = (ScaleInfo)context.get(source);
+    if (scaleInfo == null) {
+      scaleInfo = createScaleInfo(context, readerContext);
+    }
+
+    final float scale = (scaleInfo.maxVal-scaleInfo.minVal==0) ? 0 : (max-min)/(scaleInfo.maxVal-scaleInfo.minVal);
+    final float minSource = scaleInfo.minVal;
+    final float maxSource = scaleInfo.maxVal;
+
+    final DocValues vals =  source.getValues(context, readerContext);
 
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
 	return (vals.floatVal(doc) - minSource) * scale + min;
       }
+      @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 "scale(" + vals.toString(doc) + ",toMin=" + min + ",toMax=" + max
                 + ",fromMin=" + minSource
@@ -114,6 +144,7 @@ public class ScaleFloatFunction extends 
     source.createWeight(context, searcher);
   }
 
+  @Override
   public int hashCode() {
     int h = Float.floatToIntBits(min);
     h = h*29;
@@ -123,6 +154,7 @@ public class ScaleFloatFunction extends 
     return h;
   }
 
+  @Override
   public boolean equals(Object o) {
     if (ScaleFloatFunction.class != o.getClass()) return false;
     ScaleFloatFunction other = (ScaleFloatFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ShortFieldSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ShortFieldSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ShortFieldSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/ShortFieldSource.java Wed Feb  9 09:35:27 2011
@@ -18,7 +18,7 @@ package org.apache.solr.search.function;
 
 import org.apache.lucene.search.cache.ShortValuesCreator;
 import org.apache.lucene.search.cache.CachedArray.ShortValues;
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 import java.util.Map;
@@ -35,12 +35,14 @@ public class ShortFieldSource extends Nu
   }
 
 
+  @Override
   public String description() {
     return "short(" + field + ')';
   }
 
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final ShortValues vals = cache.getShorts(reader, field, creator);
+  @Override
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final ShortValues vals = cache.getShorts(readerContext.reader, field, creator);
     final short[] arr = vals.values;
     
     return new DocValues() {
@@ -54,26 +56,32 @@ public class ShortFieldSource extends Nu
         return arr[doc];
       }
 
+      @Override
       public float floatVal(int doc) {
         return (float) arr[doc];
       }
 
+      @Override
       public int intVal(int doc) {
         return (int) arr[doc];
       }
 
+      @Override
       public long longVal(int doc) {
         return (long) arr[doc];
       }
 
+      @Override
       public double doubleVal(int doc) {
         return (double) arr[doc];
       }
 
+      @Override
       public String strVal(int doc) {
         return Short.toString(arr[doc]);
       }
 
+      @Override
       public String toString(int doc) {
         return description() + '=' + shortVal(doc);
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SimpleFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SimpleFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SimpleFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SimpleFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -17,7 +17,7 @@
 
 package org.apache.solr.search.function;
 
-import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 
 import java.io.IOException;
 import java.util.Map;
@@ -32,24 +32,30 @@ import java.util.Map;
   protected abstract float func(int doc, DocValues vals);
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    final DocValues vals =  source.getValues(context, reader);
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    final DocValues vals =  source.getValues(context, readerContext);
     return new DocValues() {
+      @Override
       public float floatVal(int doc) {
 	return func(doc, vals);
       }
+      @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 name() + '(' + vals.toString(doc) + ')';
       }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SingleFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SingleFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SingleFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SingleFunction.java Wed Feb  9 09:35:27 2011
@@ -33,14 +33,17 @@ import java.util.Map;
 
   protected abstract String name();
 
+  @Override
   public String description() {
     return name() + '(' + source.description() + ')';
   }
 
+  @Override
   public int hashCode() {
     return source.hashCode() + name().hashCode();
   }
 
+  @Override
   public boolean equals(Object o) {
     if (this.getClass() != o.getClass()) return false;
     SingleFunction other = (SingleFunction)o;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/StringIndexDocValues.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/StringIndexDocValues.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/StringIndexDocValues.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/StringIndexDocValues.java Wed Feb  9 09:35:27 2011
@@ -19,6 +19,7 @@ package org.apache.solr.search.function;
 
 import org.apache.lucene.search.FieldCache;
 import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.search.MutableValue;
 import org.apache.solr.search.MutableValueStr;
@@ -33,9 +34,9 @@ public abstract class StringIndexDocValu
     protected final ValueSource vs;
     protected final MutableValueStr val = new MutableValueStr();
 
-    public StringIndexDocValues(ValueSource vs, IndexReader reader, String field) throws IOException {
+    public StringIndexDocValues(ValueSource vs, AtomicReaderContext context, String field) throws IOException {
       try {
-        termsIndex = FieldCache.DEFAULT.getTermsIndex(reader, field);
+        termsIndex = FieldCache.DEFAULT.getTermsIndex(context.reader, field);
       } catch (RuntimeException e) {
         throw new StringIndexException(field, e);
       }
@@ -88,6 +89,7 @@ public abstract class StringIndexDocValu
       };
     }
 
+  @Override
   public String toString(int doc) {
     return vs.description() + '=' + strVal(doc);
   }

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SumFloatFunction.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SumFloatFunction.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SumFloatFunction.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/SumFloatFunction.java Wed Feb  9 09:35:27 2011
@@ -30,6 +30,7 @@ public class SumFloatFunction extends Mu
     return "sum";
   }
 
+  @Override
   protected float func(int doc, DocValues[] valsArr) {
     float val = 0.0f;
     for (DocValues vals : valsArr) {

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TFValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TFValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TFValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TFValueSource.java Wed Feb  9 09:35:27 2011
@@ -1,6 +1,24 @@
 package org.apache.solr.search.function;
 
+/**
+ * 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.lucene.index.*;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.Similarity;
@@ -21,11 +39,10 @@ public class TFValueSource extends TermF
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    // use MultiFields, just in case someone did a top() function
-    Fields fields = MultiFields.getFields(reader);
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    Fields fields = readerContext.reader.fields();
     final Terms terms = fields.terms(field);
-    final Similarity similarity = ((IndexSearcher)context.get("searcher")).getSimilarity();
+    final Similarity similarity = ((IndexSearcher)context.get("searcher")).getSimilarityProvider().get(field);
 
     return new FloatDocValues(this) {
       DocsEnum docs ;

Modified: lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TermFreqValueSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TermFreqValueSource.java?rev=1068809&r1=1068808&r2=1068809&view=diff
==============================================================================
--- lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TermFreqValueSource.java (original)
+++ lucene/dev/branches/docvalues/solr/src/java/org/apache/solr/search/function/TermFreqValueSource.java Wed Feb  9 09:35:27 2011
@@ -18,6 +18,7 @@
 package org.apache.solr.search.function;
 
 import org.apache.lucene.index.*;
+import org.apache.lucene.index.IndexReader.AtomicReaderContext;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.SolrException;
@@ -36,9 +37,8 @@ public class TermFreqValueSource extends
   }
 
   @Override
-  public DocValues getValues(Map context, IndexReader reader) throws IOException {
-    // use MultiFields, just in case someone did a top() function
-    Fields fields = MultiFields.getFields(reader);
+  public DocValues getValues(Map context, AtomicReaderContext readerContext) throws IOException {
+    Fields fields = readerContext.reader.fields();
     final Terms terms = fields.terms(field);
 
     return new IntDocValues(this) {