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) {