You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/09/21 13:42:08 UTC
[04/16] lucene-solr:master: LUCENE-7407: switch doc values usage to
an iterator API, based on DocIdSetIterator, instead of random acces,
freeing codecs for future improvements
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterLeafReader.java b/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterLeafReader.java
index 2053199..a75af54 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterLeafReader.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/index/FieldFilterLeafReader.java
@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
-import org.apache.lucene.util.Bits;
import org.apache.lucene.util.FilterIterator;
/**
@@ -114,13 +113,6 @@ public final class FieldFilterLeafReader extends FilterLeafReader {
return (f == null) ? null : new FieldFilterFields(f);
}
-
-
- @Override
- public NumericDocValues getNumericDocValues(String field) throws IOException {
- return hasField(field) ? super.getNumericDocValues(field) : null;
- }
-
@Override
public BinaryDocValues getBinaryDocValues(String field) throws IOException {
return hasField(field) ? super.getBinaryDocValues(field) : null;
@@ -147,11 +139,6 @@ public final class FieldFilterLeafReader extends FilterLeafReader {
}
@Override
- public Bits getDocsWithField(String field) throws IOException {
- return hasField(field) ? super.getDocsWithField(field) : null;
- }
-
- @Override
public String toString() {
final StringBuilder sb = new StringBuilder("FieldFilterLeafReader(reader=");
sb.append(in).append(", fields=");
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java b/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
index ea70c98..4fd8fab 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/search/QueryUtils.java
@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Random;
import org.apache.lucene.index.BinaryDocValues;
-import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.FieldInfos;
import org.apache.lucene.index.Fields;
@@ -32,6 +31,7 @@ import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.NumericDocValues;
+import org.apache.lucene.index.PointValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedNumericDocValues;
import org.apache.lucene.index.SortedSetDocValues;
@@ -40,12 +40,12 @@ import org.apache.lucene.index.Terms;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.LuceneTestCase;
+import junit.framework.Assert;
+
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
-import junit.framework.Assert;
-
/**
* Utility class for sanity-checking queries.
*/
@@ -246,11 +246,6 @@ public class QueryUtils {
}
@Override
- public Bits getDocsWithField(String field) throws IOException {
- return null;
- }
-
- @Override
public NumericDocValues getNormValues(String field) throws IOException {
return null;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
index 98cd2a7..e62c563 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
@@ -144,6 +144,7 @@ import junit.framework.AssertionFailedError;
import static com.carrotsearch.randomizedtesting.RandomizedTest.systemPropertyAsBoolean;
import static com.carrotsearch.randomizedtesting.RandomizedTest.systemPropertyAsInt;
+import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
/**
* Base class for all Lucene unit tests, Junit3 or Junit4 variant.
@@ -2440,8 +2441,8 @@ public abstract class LuceneTestCase extends Assert {
if (leftValues != null && rightValues != null) {
assertDocValuesEquals(info, leftReader.maxDoc(), leftValues, rightValues);
} else {
- assertNull(info, leftValues);
- assertNull(info, rightValues);
+ assertTrue(info + ": left numeric doc values for field=\"" + field + "\" are not null", leftValues == null || leftValues.nextDoc() == NO_MORE_DOCS);
+ assertTrue(info + ": right numeric doc values for field=\"" + field + "\" are not null", rightValues == null || rightValues.nextDoc() == NO_MORE_DOCS);
}
}
@@ -2449,14 +2450,17 @@ public abstract class LuceneTestCase extends Assert {
BinaryDocValues leftValues = MultiDocValues.getBinaryValues(leftReader, field);
BinaryDocValues rightValues = MultiDocValues.getBinaryValues(rightReader, field);
if (leftValues != null && rightValues != null) {
- for(int docID=0;docID<leftReader.maxDoc();docID++) {
- final BytesRef left = BytesRef.deepCopyOf(leftValues.get(docID));
- final BytesRef right = rightValues.get(docID);
- assertEquals(info, left, right);
+ while (true) {
+ int docID = leftValues.nextDoc();
+ assertEquals(docID, rightValues.nextDoc());
+ if (docID == NO_MORE_DOCS) {
+ break;
+ }
+ assertEquals(leftValues.binaryValue(), rightValues.binaryValue());
}
} else {
- assertNull(info, leftValues);
- assertNull(info, rightValues);
+ assertTrue(info, leftValues == null || leftValues.nextDoc() == NO_MORE_DOCS);
+ assertTrue(info, rightValues == null || rightValues.nextDoc() == NO_MORE_DOCS);
}
}
@@ -2474,8 +2478,10 @@ public abstract class LuceneTestCase extends Assert {
}
// bytes
for(int docID=0;docID<leftReader.maxDoc();docID++) {
- final BytesRef left = BytesRef.deepCopyOf(leftValues.get(docID));
- final BytesRef right = rightValues.get(docID);
+ assertEquals(docID, leftValues.nextDoc());
+ assertEquals(docID, rightValues.nextDoc());
+ final BytesRef left = BytesRef.deepCopyOf(leftValues.binaryValue());
+ final BytesRef right = rightValues.binaryValue();
assertEquals(info, left, right);
}
} else {
@@ -2497,9 +2503,12 @@ public abstract class LuceneTestCase extends Assert {
assertEquals(info, left, right);
}
// ord lists
- for(int docID=0;docID<leftReader.maxDoc();docID++) {
- leftValues.setDocument(docID);
- rightValues.setDocument(docID);
+ while (true) {
+ int docID = leftValues.nextDoc();
+ assertEquals(docID, rightValues.nextDoc());
+ if (docID == NO_MORE_DOCS) {
+ break;
+ }
long ord;
while ((ord = leftValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
assertEquals(info, ord, rightValues.nextOrd());
@@ -2516,46 +2525,36 @@ public abstract class LuceneTestCase extends Assert {
SortedNumericDocValues leftValues = MultiDocValues.getSortedNumericValues(leftReader, field);
SortedNumericDocValues rightValues = MultiDocValues.getSortedNumericValues(rightReader, field);
if (leftValues != null && rightValues != null) {
- for (int i = 0; i < leftReader.maxDoc(); i++) {
- leftValues.setDocument(i);
- long expected[] = new long[leftValues.count()];
- for (int j = 0; j < expected.length; j++) {
- expected[j] = leftValues.valueAt(j);
+ while (true) {
+ int docID = leftValues.nextDoc();
+ assertEquals(docID, rightValues.nextDoc());
+ if (docID == NO_MORE_DOCS) {
+ break;
}
- rightValues.setDocument(i);
- for (int j = 0; j < expected.length; j++) {
- assertEquals(info, expected[j], rightValues.valueAt(j));
+ assertEquals(info, leftValues.docValueCount(), rightValues.docValueCount());
+ for (int j = 0; j < leftValues.docValueCount(); j++) {
+ assertEquals(info, leftValues.nextValue(), rightValues.nextValue());
}
- assertEquals(info, expected.length, rightValues.count());
}
} else {
assertNull(info, leftValues);
assertNull(info, rightValues);
}
}
-
- {
- Bits leftBits = MultiDocValues.getDocsWithField(leftReader, field);
- Bits rightBits = MultiDocValues.getDocsWithField(rightReader, field);
- if (leftBits != null && rightBits != null) {
- assertEquals(info, leftBits.length(), rightBits.length());
- for (int i = 0; i < leftBits.length(); i++) {
- assertEquals(info, leftBits.get(i), rightBits.get(i));
- }
- } else {
- assertNull(info, leftBits);
- assertNull(info, rightBits);
- }
- }
}
}
public void assertDocValuesEquals(String info, int num, NumericDocValues leftDocValues, NumericDocValues rightDocValues) throws IOException {
assertNotNull(info, leftDocValues);
assertNotNull(info, rightDocValues);
- for(int docID=0;docID<num;docID++) {
- assertEquals(leftDocValues.get(docID),
- rightDocValues.get(docID));
+ while (true) {
+ int leftDocID = leftDocValues.nextDoc();
+ int rightDocID = rightDocValues.nextDoc();
+ assertEquals(leftDocID, rightDocID);
+ if (leftDocID == NO_MORE_DOCS) {
+ return;
+ }
+ assertEquals(leftDocValues.longValue(), rightDocValues.longValue());
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java b/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
index 19fcb3b..710e505 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
@@ -377,8 +377,7 @@ public final class TestUtil {
if (reader.getBinaryDocValues(info.name) != null ||
reader.getNumericDocValues(info.name) != null ||
reader.getSortedDocValues(info.name) != null ||
- reader.getSortedSetDocValues(info.name) != null ||
- reader.getDocsWithField(info.name) != null) {
+ reader.getSortedSetDocValues(info.name) != null) {
throw new RuntimeException("field: " + info.name + " has docvalues but should omit them!");
}
break;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
index 2bcaa33..ab36307 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/accumulator/facet/FieldFacetAccumulator.java
@@ -22,13 +22,12 @@ import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.analytics.accumulator.FacetingAccumulator;
import org.apache.solr.analytics.accumulator.ValueAccumulator;
-import org.apache.solr.analytics.util.AnalyticsParsers;
import org.apache.solr.analytics.util.AnalyticsParsers.NumericParser;
import org.apache.solr.analytics.util.AnalyticsParsers.Parser;
+import org.apache.solr.analytics.util.AnalyticsParsers;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.schema.DateValueFieldType;
import org.apache.solr.schema.SchemaField;
@@ -48,9 +47,8 @@ public class FieldFacetAccumulator extends ValueAccumulator {
protected final boolean numField;
protected final boolean dateField;
protected SortedSetDocValues setValues;
- protected SortedDocValues sortValues;
- protected NumericDocValues numValues;
- protected Bits numValuesBits;
+ protected SortedDocValues sortValues;
+ protected NumericDocValues numValues;
public FieldFacetAccumulator(SolrIndexSearcher searcher, FacetValueAccumulator parent, SchemaField schemaField) throws IOException {
if( !schemaField.hasDocValues() ){
@@ -80,7 +78,6 @@ public class FieldFacetAccumulator extends ValueAccumulator {
} else {
if (numField) {
numValues = context.reader().getNumericDocValues(name);
- numValuesBits = context.reader().getDocsWithField(name);
} else {
sortValues = context.reader().getSortedDocValues(name);
}
@@ -96,12 +93,16 @@ public class FieldFacetAccumulator extends ValueAccumulator {
if (multiValued) {
boolean exists = false;
if (setValues!=null) {
- setValues.setDocument(doc);
- int term;
- while ((term = (int)setValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
- exists = true;
- final BytesRef value = setValues.lookupOrd(term);
- parent.collectField(doc, name, parser.parse(value) );
+ if (doc > setValues.docID()) {
+ setValues.advance(doc);
+ }
+ if (doc == setValues.docID()) {
+ int term;
+ while ((term = (int)setValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
+ exists = true;
+ final BytesRef value = setValues.lookupOrd(term);
+ parent.collectField(doc, name, parser.parse(value) );
+ }
}
}
if (!exists) {
@@ -110,9 +111,12 @@ public class FieldFacetAccumulator extends ValueAccumulator {
} else {
if(numField){
if(numValues != null) {
- long v = numValues.get(doc);
- if( v != 0 || numValuesBits.get(doc) ){
- parent.collectField(doc, name, ((NumericParser)parser).parseNum(v));
+ int valuesDocID = numValues.docID();
+ if (valuesDocID < doc) {
+ valuesDocID = numValues.advance(doc);
+ }
+ if (valuesDocID == doc) {
+ parent.collectField(doc, name, ((NumericParser)parser).parseNum(numValues.longValue()));
} else {
parent.collectField(doc, name, FacetingAccumulator.MISSING_VALUE );
}
@@ -121,11 +125,13 @@ public class FieldFacetAccumulator extends ValueAccumulator {
}
} else {
if(sortValues != null) {
- final int ord = sortValues.getOrd(doc);
- if (ord < 0) {
- parent.collectField(doc, name, FacetingAccumulator.MISSING_VALUE );
+ if (doc > sortValues.docID()) {
+ sortValues.advance(doc);
+ }
+ if (doc == sortValues.docID()) {
+ parent.collectField(doc, name, parser.parse(sortValues.lookupOrd(sortValues.ordValue())) );
} else {
- parent.collectField(doc, name, parser.parse(sortValues.lookupOrd(ord)) );
+ parent.collectField(doc, name, FacetingAccumulator.MISSING_VALUE );
}
} else {
parent.collectField(doc, name, FacetingAccumulator.MISSING_VALUE );
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/AbstractDelegatingStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/AbstractDelegatingStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/AbstractDelegatingStatsCollector.java
index 45dfa00..92969f1 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/AbstractDelegatingStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/AbstractDelegatingStatsCollector.java
@@ -64,7 +64,7 @@ public abstract class AbstractDelegatingStatsCollector implements StatsCollector
return delegate.getFunction();
}
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
delegate.collect(doc);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MedianStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MedianStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MedianStatsCollector.java
index c91840b..bf71429 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MedianStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MedianStatsCollector.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.analytics.statistics;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -52,7 +53,7 @@ public class MedianStatsCollector extends AbstractDelegatingStatsCollector{
}
@Override
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
super.collect(doc);
if (value.exists) {
values.add(function.doubleVal(doc));
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
index 7e3bde1..c21b045 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/MinMaxStatsCollector.java
@@ -51,7 +51,7 @@ public class MinMaxStatsCollector implements StatsCollector{
value = valueFiller.getValue();
}
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
valueFiller.fillValue(doc);
if( value.exists ){
valueCount += 1;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/NumericStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/NumericStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/NumericStatsCollector.java
index 6a64eeb..1f22baa 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/NumericStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/NumericStatsCollector.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.analytics.statistics;
+import java.io.IOException;
import java.util.Set;
import org.apache.lucene.queries.function.ValueSource;
@@ -33,7 +34,7 @@ public class NumericStatsCollector extends MinMaxStatsCollector {
super(source, statsList);
}
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
super.collect(doc);
double value = function.doubleVal(doc);
sum += value;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/PercentileStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/PercentileStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/PercentileStatsCollector.java
index 5f63ef9..e12cb83 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/PercentileStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/PercentileStatsCollector.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.analytics.statistics;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
@@ -69,7 +70,7 @@ public class PercentileStatsCollector extends AbstractDelegatingStatsCollector{
return PercentileCalculator.getPercentiles(values, percentiles);
}
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
super.collect(doc);
if (value.exists) {
values.add((Comparable)value.toObject());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollector.java
index d9a4640..039300f 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/StatsCollector.java
@@ -33,7 +33,7 @@ public interface StatsCollector {
* Collect values from the value source and add to statistics.
* @param doc Document to collect from
*/
- void collect(int doc);
+ void collect(int doc) throws IOException;
/**
* @param context The context to read documents from.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/UniqueStatsCollector.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/UniqueStatsCollector.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/UniqueStatsCollector.java
index d4d537c..461b0f4 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/UniqueStatsCollector.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/statistics/UniqueStatsCollector.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.analytics.statistics;
+import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
@@ -30,7 +31,7 @@ public class UniqueStatsCollector extends AbstractDelegatingStatsCollector{
}
@Override
- public void collect(int doc) {
+ public void collect(int doc) throws IOException {
super.collect(doc);
if (value.exists) {
uniqueValues.add(value.toObject());
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AbsoluteValueDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AbsoluteValueDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AbsoluteValueDoubleFunction.java
index 62c99a7..f1e996c 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AbsoluteValueDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AbsoluteValueDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -39,7 +41,7 @@ public class AbsoluteValueDoubleFunction extends SingleDoubleFunction {
return name()+"("+source.description()+")";
}
- protected double func(int doc, FunctionValues vals) {
+ protected double func(int doc, FunctionValues vals) throws IOException {
double d = vals.doubleVal(doc);
if (d<0) {
return d*-1;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AddDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AddDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AddDoubleFunction.java
index 1a8a254..c47a0a3 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AddDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/AddDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -36,7 +38,7 @@ public class AddDoubleFunction extends MultiDoubleFunction {
}
@Override
- protected double func(int doc, FunctionValues[] valsArr) {
+ protected double func(int doc, FunctionValues[] valsArr) throws IOException {
double sum = 0d;
for (FunctionValues val : valsArr) {
sum += val.doubleVal(doc);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
index 3620c47..b1e1dc0 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ConcatStringFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -36,7 +38,7 @@ public class ConcatStringFunction extends MultiStringFunction {
}
@Override
- protected String func(int doc, FunctionValues[] valsArr) {
+ protected String func(int doc, FunctionValues[] valsArr) throws IOException {
StringBuilder sb = new StringBuilder();
for (FunctionValues val : valsArr) {
String v = val.strVal(doc);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateFieldSource.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateFieldSource.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateFieldSource.java
index 22dde4c..d13795d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateFieldSource.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateFieldSource.java
@@ -28,7 +28,6 @@ import org.apache.lucene.legacy.LegacyNumericUtils;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.docvalues.LongDocValues;
import org.apache.lucene.queries.function.valuesource.LongFieldSource;
-import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.mutable.MutableValue;
import org.apache.lucene.util.mutable.MutableValueDate;
@@ -59,26 +58,39 @@ public class DateFieldSource extends LongFieldSource {
@Override
public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
final NumericDocValues arr = DocValues.getNumeric(readerContext.reader(), field);
- final Bits valid = DocValues.getDocsWithField(readerContext.reader(), field);
return new LongDocValues(this) {
+
+ private long getDocValue(int doc) throws IOException {
+ int arrDocID = arr.docID();
+ if (arrDocID < doc) {
+ arrDocID = arr.advance(doc);
+ }
+ if (arrDocID == doc) {
+ return arr.longValue();
+ } else {
+ return 0;
+ }
+ }
+
@Override
- public long longVal(int doc) {
- return arr.get(doc);
+ public long longVal(int doc) throws IOException {
+ return getDocValue(doc);
}
@Override
- public boolean exists(int doc) {
- return valid.get(doc);
+ public boolean exists(int doc) throws IOException {
+ getDocValue(doc);
+ return arr.docID() == doc;
}
@Override
- public Object objectVal(int doc) {
- return exists(doc) ? longToObject(arr.get(doc)) : null;
+ public Object objectVal(int doc) throws IOException {
+ return exists(doc) ? longToObject(getDocValue(doc)) : null;
}
@Override
- public String strVal(int doc) {
- return exists(doc) ? longToString(arr.get(doc)) : null;
+ public String strVal(int doc) throws IOException {
+ return exists(doc) ? longToString(getDocValue(doc)) : null;
}
@Override
@@ -92,8 +104,8 @@ public class DateFieldSource extends LongFieldSource {
}
@Override
- public void fillValue(int doc) {
- mval.value = arr.get(doc);
+ public void fillValue(int doc) throws IOException {
+ mval.value = getDocValue(doc);
mval.exists = exists(doc);
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateMathFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateMathFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateMathFunction.java
index 2bf40f3..77b172a 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateMathFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DateMathFunction.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
@@ -50,7 +51,7 @@ public class DateMathFunction extends MultiDateFunction {
}
@Override
- protected long func(int doc, FunctionValues[] valsArr) {
+ protected long func(int doc, FunctionValues[] valsArr) throws IOException {
long time = 0;
Date date = (Date)valsArr[0].objectVal(doc);
try {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DivDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DivDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DivDoubleFunction.java
index 5e43901..25c4c96 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DivDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DivDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -39,7 +41,7 @@ public class DivDoubleFunction extends DualDoubleFunction {
}
@Override
- protected double func(int doc, FunctionValues aVals, FunctionValues bVals) {
+ protected double func(int doc, FunctionValues aVals, FunctionValues bVals) throws IOException {
return aVals.doubleVal(doc)/bVals.doubleVal(doc);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DualDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DualDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DualDoubleFunction.java
index 96058aa..97b8af7 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DualDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/DualDoubleFunction.java
@@ -39,7 +39,7 @@ public abstract class DualDoubleFunction extends ValueSource {
}
protected abstract String name();
- protected abstract double func(int doc, FunctionValues aVals, FunctionValues bVals);
+ protected abstract double func(int doc, FunctionValues aVals, FunctionValues bVals) throws IOException;
@Override
public String description() {
@@ -52,17 +52,17 @@ public abstract class DualDoubleFunction extends ValueSource {
final FunctionValues bVals = b.getValues(context, readerContext);
return new DoubleDocValues(this) {
@Override
- public double doubleVal(int doc) {
+ public double doubleVal(int doc) throws IOException {
return func(doc, aVals, bVals);
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
return aVals.exists(doc) & bVals.exists(doc);
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
return name() + '(' + aVals.toString(doc) + ',' + bVals.toString(doc) + ')';
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/FilterFieldSource.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/FilterFieldSource.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/FilterFieldSource.java
index 22f5a57..3f374dc 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/FilterFieldSource.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/FilterFieldSource.java
@@ -60,53 +60,53 @@ public class FilterFieldSource extends ValueSource {
return new FunctionValues() {
@Override
- public byte byteVal(int doc) {
+ public byte byteVal(int doc) throws IOException {
return vals.byteVal(doc);
}
@Override
- public short shortVal(int doc) {
+ public short shortVal(int doc) throws IOException {
return vals.shortVal(doc);
}
@Override
- public float floatVal(int doc) {
+ public float floatVal(int doc) throws IOException {
return vals.floatVal(doc);
}
@Override
- public int intVal(int doc) {
+ public int intVal(int doc) throws IOException {
return vals.intVal(doc);
}
@Override
- public long longVal(int doc) {
+ public long longVal(int doc) throws IOException {
return vals.longVal(doc);
}
@Override
- public double doubleVal(int doc) {
+ public double doubleVal(int doc) throws IOException {
return vals.doubleVal(doc);
}
@Override
- public String strVal(int doc) {
+ public String strVal(int doc) throws IOException {
return vals.strVal(doc);
}
@Override
- public Object objectVal(int doc) {
+ public Object objectVal(int doc) throws IOException {
return exists(doc)? vals.objectVal(doc) : null;
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
Object other = vals.objectVal(doc);
return other!=null&&!missValue.equals(other);
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
return NAME + '(' + vals.toString(doc) + ')';
}
@@ -122,7 +122,7 @@ public class FilterFieldSource extends ValueSource {
}
@Override
- public void fillValue(int doc) {
+ public void fillValue(int doc) throws IOException {
delegateFiller.fillValue(doc);
mval.exists = exists(doc);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/LogDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/LogDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/LogDoubleFunction.java
index 63906de..41a6b67 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/LogDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/LogDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -35,7 +37,7 @@ public class LogDoubleFunction extends DualDoubleFunction {
}
@Override
- protected double func(int doc, FunctionValues aVals, FunctionValues bVals) {
+ protected double func(int doc, FunctionValues aVals, FunctionValues bVals) throws IOException {
return Math.log(aVals.doubleVal(doc))/Math.log(bVals.doubleVal(doc));
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDateFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDateFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDateFunction.java
index 3daa0ea..beeaaa7 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDateFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDateFunction.java
@@ -39,7 +39,7 @@ public abstract class MultiDateFunction extends ValueSource {
}
abstract protected String name();
- abstract protected long func(int doc, FunctionValues[] valsArr);
+ abstract protected long func(int doc, FunctionValues[] valsArr) throws IOException;
@Override
public String description() {
@@ -67,12 +67,12 @@ public abstract class MultiDateFunction extends ValueSource {
return new LongDocValues(this) {
@Override
- public long longVal(int doc) {
+ public long longVal(int doc) throws IOException {
return func(doc, valsArr);
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
boolean exists = true;
for (FunctionValues val : valsArr) {
exists = exists & val.exists(doc);
@@ -81,7 +81,7 @@ public abstract class MultiDateFunction extends ValueSource {
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
StringBuilder sb = new StringBuilder();
sb.append(name()).append('(');
boolean firstTime=true;
@@ -108,7 +108,7 @@ public abstract class MultiDateFunction extends ValueSource {
}
@Override
- public void fillValue(int doc) {
+ public void fillValue(int doc) throws IOException {
mval.value = longVal(doc);
mval.exists = exists(doc);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDoubleFunction.java
index ded716c..09956f2 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiDoubleFunction.java
@@ -38,7 +38,7 @@ public abstract class MultiDoubleFunction extends ValueSource {
}
abstract protected String name();
- abstract protected double func(int doc, FunctionValues[] valsArr);
+ abstract protected double func(int doc, FunctionValues[] valsArr) throws IOException;
@Override
public String description() {
@@ -66,12 +66,12 @@ public abstract class MultiDoubleFunction extends ValueSource {
return new DoubleDocValues(this) {
@Override
- public double doubleVal(int doc) {
+ public double doubleVal(int doc) throws IOException {
return func(doc, valsArr);
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
boolean exists = true;
for (FunctionValues val : valsArr) {
exists = exists & val.exists(doc);
@@ -80,7 +80,7 @@ public abstract class MultiDoubleFunction extends ValueSource {
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
StringBuilder sb = new StringBuilder();
sb.append(name()).append('(');
boolean firstTime=true;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
index 1d9c67d..4689d8b 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiStringFunction.java
@@ -40,7 +40,7 @@ public abstract class MultiStringFunction extends ValueSource {
}
abstract protected String name();
- abstract protected CharSequence func(int doc, FunctionValues[] valsArr);
+ abstract protected CharSequence func(int doc, FunctionValues[] valsArr) throws IOException;
@Override
public String description() {
@@ -68,13 +68,13 @@ public abstract class MultiStringFunction extends ValueSource {
return new StrDocValues(this) {
@Override
- public String strVal(int doc) {
+ public String strVal(int doc) throws IOException {
CharSequence cs = func(doc, valsArr);
return cs != null ? cs.toString() : null;
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
boolean exists = true;
for (FunctionValues val : valsArr) {
exists = exists & val.exists(doc);
@@ -83,7 +83,7 @@ public abstract class MultiStringFunction extends ValueSource {
}
@Override
- public boolean bytesVal(int doc, BytesRefBuilder bytes) {
+ public boolean bytesVal(int doc, BytesRefBuilder bytes) throws IOException {
bytes.clear();
CharSequence cs = func(doc, valsArr);
if( cs != null ){
@@ -95,7 +95,7 @@ public abstract class MultiStringFunction extends ValueSource {
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
StringBuilder sb = new StringBuilder();
sb.append(name()).append('(');
boolean firstTime=true;
@@ -122,7 +122,7 @@ public abstract class MultiStringFunction extends ValueSource {
}
@Override
- public void fillValue(int doc) {
+ public void fillValue(int doc) throws IOException {
mval.exists = bytesVal(doc, mval.value);
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiplyDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiplyDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiplyDoubleFunction.java
index 1624ae9..83f26f0 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiplyDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/MultiplyDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -36,7 +38,7 @@ public class MultiplyDoubleFunction extends MultiDoubleFunction {
}
@Override
- protected double func(int doc, FunctionValues[] valsArr) {
+ protected double func(int doc, FunctionValues[] valsArr) throws IOException {
double product = 1d;
for (FunctionValues val : valsArr) {
product *= val.doubleVal(doc);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/NegateDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/NegateDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/NegateDoubleFunction.java
index 4297261..9c8445d 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/NegateDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/NegateDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -39,7 +41,7 @@ public class NegateDoubleFunction extends SingleDoubleFunction {
return name()+"("+source.description()+")";
}
- protected double func(int doc, FunctionValues vals) {
+ protected double func(int doc, FunctionValues vals) throws IOException {
return vals.doubleVal(doc)*-1;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/PowDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/PowDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/PowDoubleFunction.java
index 757e31b..043313b 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/PowDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/PowDoubleFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
import org.apache.solr.analytics.util.AnalyticsParams;
@@ -40,7 +42,7 @@ public class PowDoubleFunction extends DualDoubleFunction {
}
@Override
- protected double func(int doc, FunctionValues aVals, FunctionValues bVals) {
+ protected double func(int doc, FunctionValues aVals, FunctionValues bVals) throws IOException {
return Math.pow(aVals.doubleVal(doc), bVals.doubleVal(doc));
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ReverseStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ReverseStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ReverseStringFunction.java
index 68a18d4..4fa0f99 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ReverseStringFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/ReverseStringFunction.java
@@ -16,6 +16,8 @@
*/
package org.apache.solr.analytics.util.valuesource;
+import java.io.IOException;
+
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
@@ -35,7 +37,7 @@ public class ReverseStringFunction extends SingleStringFunction {
return NAME;
}
- protected CharSequence func(int doc, FunctionValues vals) {
+ protected CharSequence func(int doc, FunctionValues vals) throws IOException {
String val = vals.strVal(doc);
return val != null ? StringUtils.reverse(val) : null;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleDoubleFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleDoubleFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleDoubleFunction.java
index 967f014..04f79ed 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleDoubleFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleDoubleFunction.java
@@ -41,24 +41,24 @@ public abstract class SingleDoubleFunction extends ValueSource {
}
abstract String name();
- abstract double func(int doc, FunctionValues vals);
+ abstract double func(int doc, FunctionValues vals) throws IOException;
@Override
public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
final FunctionValues vals = source.getValues(context, readerContext);
return new DoubleDocValues(this) {
@Override
- public double doubleVal(int doc) {
+ public double doubleVal(int doc) throws IOException {
return func(doc, vals);
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
return vals.exists(doc);
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
return name() + '(' + vals.toString(doc) + ')';
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleStringFunction.java
----------------------------------------------------------------------
diff --git a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleStringFunction.java b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleStringFunction.java
index b6a79f0..b3357f9 100644
--- a/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleStringFunction.java
+++ b/solr/contrib/analytics/src/java/org/apache/solr/analytics/util/valuesource/SingleStringFunction.java
@@ -44,20 +44,20 @@ public abstract class SingleStringFunction extends ValueSource {
}
abstract String name();
- abstract CharSequence func(int doc, FunctionValues vals);
+ abstract CharSequence func(int doc, FunctionValues vals) throws IOException;
@Override
public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
final FunctionValues vals = source.getValues(context, readerContext);
return new StrDocValues(this) {
@Override
- public String strVal(int doc) {
+ public String strVal(int doc) throws IOException {
CharSequence cs = func(doc, vals);
return cs != null ? cs.toString() : null;
}
@Override
- public boolean bytesVal(int doc, BytesRefBuilder bytes) {
+ public boolean bytesVal(int doc, BytesRefBuilder bytes) throws IOException {
CharSequence cs = func(doc, vals);
if( cs != null ){
bytes.copyChars(func(doc,vals));
@@ -69,17 +69,17 @@ public abstract class SingleStringFunction extends ValueSource {
}
@Override
- public Object objectVal(int doc) {
+ public Object objectVal(int doc) throws IOException {
return strVal(doc);
}
@Override
- public boolean exists(int doc) {
+ public boolean exists(int doc) throws IOException {
return vals.exists(doc);
}
@Override
- public String toString(int doc) {
+ public String toString(int doc) throws IOException {
return name() + '(' + strVal(doc) + ')';
}
@@ -94,7 +94,7 @@ public abstract class SingleStringFunction extends ValueSource {
}
@Override
- public void fillValue(int doc) {
+ public void fillValue(int doc) throws IOException {
mval.exists = bytesVal(doc, mval.value);
}
};
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
index eb22d90..e307e70 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
@@ -275,7 +275,7 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
SortedDocValues[] sortedDocValues = null;
LongValues segmentOrdinalMap = null;
SortedDocValues currentValues = null;
- if(values instanceof MultiDocValues.MultiSortedDocValues) {
+ if(values instanceof MultiDocValues.MultiSortedDocValues) {
ordinalMap = ((MultiDocValues.MultiSortedDocValues)values).mapping;
sortedDocValues = ((MultiDocValues.MultiSortedDocValues)values).values;
currentValues = sortedDocValues[currentContext];
@@ -299,8 +299,11 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
int contextDoc = globalDoc - currentDocBase;
if(ordinalMap != null) {
- int ord = currentValues.getOrd(contextDoc);
- if(ord > -1) {
+ if (contextDoc > currentValues.docID()) {
+ currentValues.advance(contextDoc);
+ }
+ if (contextDoc == currentValues.docID()) {
+ int ord = currentValues.ordValue();
++count;
BytesRef ref = currentValues.lookupOrd(ord);
ord = (int)segmentOrdinalMap.get(ord);
@@ -309,8 +312,11 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
collapsedSet.add(globalDoc);
}
} else {
- int ord = values.getOrd(globalDoc);
- if(ord > -1) {
+ if (globalDoc > values.docID()) {
+ values.advance(globalDoc);
+ }
+ if (globalDoc == values.docID()) {
+ int ord = values.ordValue();
++count;
BytesRef ref = values.lookupOrd(ord);
ordBytes.put(ord, BytesRef.deepCopyOf(ref));
@@ -340,7 +346,16 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
collapseValues = contexts.get(currentContext).reader().getNumericDocValues(field);
}
int contextDoc = globalDoc - currentDocBase;
- long value = collapseValues.get(contextDoc);
+ int valueDocID = collapseValues.docID();
+ if (valueDocID < contextDoc) {
+ valueDocID = collapseValues.advance(contextDoc);
+ }
+ long value;
+ if (valueDocID == contextDoc) {
+ value = collapseValues.longValue();
+ } else {
+ value = 0;
+ }
if(value != nullValue) {
++count;
groupSet.add(value);
@@ -361,6 +376,16 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
Collector groupExpandCollector = null;
if(values != null) {
+ //Get The Top Level SortedDocValues again so we can re-iterate:
+ if(CollapsingQParserPlugin.HINT_TOP_FC.equals(hint)) {
+ Map<String, UninvertingReader.Type> mapping = new HashMap();
+ mapping.put(field, UninvertingReader.Type.SORTED);
+ UninvertingReader uninvertingReader = new UninvertingReader(new ReaderWrapper(searcher.getLeafReader(), field), mapping);
+ values = uninvertingReader.getSortedDocValues(field);
+ } else {
+ values = DocValues.getSorted(reader, field);
+ }
+
groupExpandCollector = new GroupExpandCollector(values, groupBits, collapsedSet, limit, sort);
} else {
groupExpandCollector = new NumericGroupExpandCollector(field, nullValue, groupSet, collapsedSet, limit, sort);
@@ -452,7 +477,6 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
if (!rb.doExpand) {
return;
}
-
if ((sreq.purpose & ShardRequest.PURPOSE_GET_FIELDS) != 0) {
SolrQueryRequest req = rb.req;
NamedList expanded = (NamedList) req.getContext().get("expanded");
@@ -553,12 +577,23 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
int globalDoc = docId + docBase;
int ord = -1;
if(ordinalMap != null) {
- ord = segmentValues.getOrd(docId);
- if(ord > -1) {
- ord = (int)segmentOrdinalMap.get(ord);
+ if (docId > segmentValues.docID()) {
+ segmentValues.advance(docId);
+ }
+ if (docId == segmentValues.docID()) {
+ ord = (int)segmentOrdinalMap.get(segmentValues.ordValue());
+ } else {
+ ord = -1;
}
} else {
- ord = docValues.getOrd(globalDoc);
+ if (globalDoc > docValues.docID()) {
+ docValues.advance(globalDoc);
+ }
+ if (globalDoc == docValues.docID()) {
+ ord = docValues.ordValue();
+ } else {
+ ord = -1;
+ }
}
if (ord > -1 && groupBits.get(ord) && !collapsedSet.contains(globalDoc)) {
@@ -624,7 +659,16 @@ public class ExpandComponent extends SearchComponent implements PluginInfoInitia
@Override
public void collect(int docId) throws IOException {
- long value = docValues.get(docId);
+ int valuesDocID = docValues.docID();
+ if (valuesDocID < docId) {
+ valuesDocID = docValues.advance(docId);
+ }
+ long value;
+ if (valuesDocID == docId) {
+ value = docValues.longValue();
+ } else {
+ value = 0;
+ }
final int index;
if (value != nullValue &&
(index = leafCollectors.indexOf(value)) >= 0 &&
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java b/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java
index 6df92c0..5a8f544 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java
@@ -22,9 +22,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReader;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.queries.function.FunctionValues;
import org.apache.lucene.queries.function.ValueSource;
@@ -97,9 +97,17 @@ public class FieldFacetStats {
if (topLevelSortedValues == null) {
topLevelSortedValues = DocValues.getSorted(topLevelReader, name);
}
+
+ if (docID > topLevelSortedValues.docID()) {
+ topLevelSortedValues.advance(docID);
+ }
-
- int term = topLevelSortedValues.getOrd(docID);
+ int term;
+ if (docID == topLevelSortedValues.docID()) {
+ term = topLevelSortedValues.ordValue();
+ } else {
+ term = -1;
+ }
int arrIdx = term;
if (arrIdx >= 0 && arrIdx < topLevelSortedValues.getValueCount()) {
@@ -162,8 +170,12 @@ public class FieldFacetStats {
topLevelSortedValues = DocValues.getSorted(topLevelReader, name);
}
- int ord = topLevelSortedValues.getOrd(docID);
- if (ord != -1) {
+ if (docID > topLevelSortedValues.docID()) {
+ topLevelSortedValues.advance(docID);
+ }
+
+ if (docID == topLevelSortedValues.docID()) {
+ int ord = topLevelSortedValues.ordValue();
Integer missingCount = missingStats.get(ord);
if (missingCount == null) {
missingStats.put(ord, 1);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java b/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
index 8c85fda..ae24568 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
@@ -39,7 +39,7 @@ public interface StatsValues {
/** Accumulate the value associated with <code>docID</code>.
* @see #setNextReader(org.apache.lucene.index.LeafReaderContext) */
- void accumulate(int docID);
+ void accumulate(int docID) throws IOException;
/**
* Accumulate the values based on the given value
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java b/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
index a2e4a4e..8a35ee0 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
@@ -485,7 +485,7 @@ class NumericStatsValues extends AbstractStatsValues<Number> {
}
@Override
- public void accumulate(int docID) {
+ public void accumulate(int docID) throws IOException {
if (values.exists(docID)) {
Number value = (Number) values.objectVal(docID);
accumulate(value, 1);
@@ -640,7 +640,7 @@ class EnumStatsValues extends AbstractStatsValues<EnumFieldValue> {
* {@inheritDoc}
*/
@Override
- public void accumulate(int docID) {
+ public void accumulate(int docID) throws IOException {
if (values.exists(docID)) {
Integer intValue = (Integer) values.objectVal(docID);
String stringValue = values.strVal(docID);
@@ -720,7 +720,7 @@ class DateStatsValues extends AbstractStatsValues<Date> {
}
@Override
- public void accumulate(int docID) {
+ public void accumulate(int docID) throws IOException {
if (values.exists(docID)) {
accumulate((Date) values.objectVal(docID), 1);
} else {
@@ -824,7 +824,7 @@ class StringStatsValues extends AbstractStatsValues<String> {
}
@Override
- public void accumulate(int docID) {
+ public void accumulate(int docID) throws IOException {
if (values.exists(docID)) {
String value = values.strVal(docID);
if (value != null) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java b/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
index 0502739..7c7098c 100644
--- a/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
+++ b/solr/core/src/java/org/apache/solr/index/SlowCompositeReaderWrapper.java
@@ -20,29 +20,10 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
-import org.apache.lucene.index.BinaryDocValues;
-import org.apache.lucene.index.CompositeReader;
-import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.FieldInfo;
-import org.apache.lucene.index.FieldInfos;
-import org.apache.lucene.index.Fields;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.LeafReader;
-import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.index.*;
import org.apache.lucene.index.MultiDocValues.MultiSortedDocValues;
-import org.apache.lucene.index.MultiDocValues.MultiSortedSetDocValues;
import org.apache.lucene.index.MultiDocValues.OrdinalMap;
-import org.apache.lucene.index.MultiDocValues;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.index.MultiReader;
import org.apache.lucene.index.NumericDocValues;
-import org.apache.lucene.index.PointValues;
-import org.apache.lucene.index.SortedDocValues;
-import org.apache.lucene.index.SortedNumericDocValues;
-import org.apache.lucene.index.SortedSetDocValues;
-import org.apache.lucene.index.StoredFieldVisitor;
import org.apache.lucene.search.Sort;
import org.apache.lucene.util.Bits;
@@ -120,12 +101,6 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
}
@Override
- public Bits getDocsWithField(String field) throws IOException {
- ensureOpen();
- return MultiDocValues.getDocsWithField(in, field);
- }
-
- @Override
public BinaryDocValues getBinaryDocValues(String field) throws IOException {
ensureOpen();
return MultiDocValues.getBinaryValues(in, field);
@@ -158,6 +133,7 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
int size = in.leaves().size();
final SortedDocValues[] values = new SortedDocValues[size];
final int[] starts = new int[size+1];
+ long totalCost = 0;
for (int i = 0; i < size; i++) {
LeafReaderContext context = in.leaves().get(i);
final LeafReader reader = context.reader();
@@ -169,11 +145,12 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
if (v == null) {
v = DocValues.emptySorted();
}
+ totalCost += v.cost();
values[i] = v;
starts[i] = context.docBase;
}
starts[size] = maxDoc();
- return new MultiSortedDocValues(values, starts, map);
+ return new MultiSortedDocValues(values, starts, map, totalCost);
}
@Override
@@ -185,8 +162,8 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
if (map == null) {
// uncached, or not a multi dv
SortedSetDocValues dv = MultiDocValues.getSortedSetValues(in, field);
- if (dv instanceof MultiSortedSetDocValues) {
- map = ((MultiSortedSetDocValues)dv).mapping;
+ if (dv instanceof MultiDocValues.MultiSortedSetDocValues) {
+ map = ((MultiDocValues.MultiSortedSetDocValues)dv).mapping;
if (map.owner == getCoreCacheKey() && merging == false) {
cachedOrdMaps.put(field, map);
}
@@ -199,6 +176,7 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
int size = in.leaves().size();
final SortedSetDocValues[] values = new SortedSetDocValues[size];
final int[] starts = new int[size+1];
+ long cost = 0;
for (int i = 0; i < size; i++) {
LeafReaderContext context = in.leaves().get(i);
final LeafReader reader = context.reader();
@@ -212,9 +190,10 @@ public final class SlowCompositeReaderWrapper extends LeafReader {
}
values[i] = v;
starts[i] = context.docBase;
+ cost += v.cost();
}
starts[size] = maxDoc();
- return new MultiSortedSetDocValues(values, starts, map);
+ return new MultiDocValues.MultiSortedSetDocValues(values, starts, map, cost);
}
// TODO: this could really be a weak map somewhere else on the coreCacheKey,
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java b/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
index 9b281a9..b21764d 100644
--- a/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/DocValuesFacets.java
@@ -21,7 +21,7 @@ import java.util.List;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.MultiDocValues.MultiSortedDocValues;
+import org.apache.lucene.index.MultiDocValues;
import org.apache.lucene.index.MultiDocValues.MultiSortedSetDocValues;
import org.apache.lucene.index.MultiDocValues.OrdinalMap;
import org.apache.lucene.index.SortedDocValues;
@@ -70,14 +70,14 @@ public class DocValuesFacets {
OrdinalMap ordinalMap = null; // for mapping per-segment ords to global ones
if (multiValued) {
si = searcher.getLeafReader().getSortedSetDocValues(fieldName);
- if (si instanceof MultiSortedSetDocValues) {
+ if (si instanceof MultiDocValues.MultiSortedSetDocValues) {
ordinalMap = ((MultiSortedSetDocValues)si).mapping;
}
} else {
SortedDocValues single = searcher.getLeafReader().getSortedDocValues(fieldName);
si = single == null ? null : DocValues.singleton(single);
- if (single instanceof MultiSortedDocValues) {
- ordinalMap = ((MultiSortedDocValues)single).mapping;
+ if (single instanceof MultiDocValues.MultiSortedDocValues) {
+ ordinalMap = ((MultiDocValues.MultiSortedDocValues)single).mapping;
}
}
if (si == null) {
@@ -272,7 +272,15 @@ public class DocValuesFacets {
final LongValues ordmap = map == null ? null : map.getGlobalOrds(subIndex);
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- int term = si.getOrd(doc);
+ if (doc > si.docID()) {
+ si.advance(doc);
+ }
+ int term;
+ if (doc == si.docID()) {
+ term = si.ordValue();
+ } else {
+ term = -1;
+ }
if (map != null && term >= 0) {
term = (int) ordmap.get(term);
}
@@ -293,7 +301,14 @@ public class DocValuesFacets {
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- segCounts[1+si.getOrd(doc)]++;
+ if (doc > si.docID()) {
+ si.advance(doc);
+ }
+ if (doc == si.docID()) {
+ segCounts[1+si.ordValue()]++;
+ } else {
+ segCounts[0]++;
+ }
}
// migrate to global ords (if necessary)
@@ -319,23 +334,22 @@ public class DocValuesFacets {
final LongValues ordMap = map == null ? null : map.getGlobalOrds(subIndex);
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- si.setDocument(doc);
- // strange do-while to collect the missing count (first ord is NO_MORE_ORDS)
- int term = (int) si.nextOrd();
- if (term < 0) {
- if (startTermIndex == -1) {
- counts[0]++; // missing count
- }
- continue;
+ if (doc > si.docID()) {
+ si.advance(doc);
+ }
+ if (doc == si.docID()) {
+ // strange do-while to collect the missing count (first ord is NO_MORE_ORDS)
+ int term = (int) si.nextOrd();
+ do {
+ if (map != null) {
+ term = (int) ordMap.get(term);
+ }
+ int arrIdx = term-startTermIndex;
+ if (arrIdx>=0 && arrIdx<counts.length) counts[arrIdx]++;
+ } while ((term = (int) si.nextOrd()) >= 0);
+ } else if (startTermIndex == -1) {
+ counts[0]++; // missing count
}
-
- do {
- if (map != null) {
- term = (int) ordMap.get(term);
- }
- int arrIdx = term-startTermIndex;
- if (arrIdx>=0 && arrIdx<counts.length) counts[arrIdx]++;
- } while ((term = (int) si.nextOrd()) >= 0);
}
}
@@ -351,14 +365,16 @@ public class DocValuesFacets {
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- si.setDocument(doc);
- int term = (int) si.nextOrd();
- if (term < 0) {
- counts[0]++; // missing
- } else {
+ if (doc > si.docID()) {
+ si.advance(doc);
+ }
+ if (doc == si.docID()) {
+ int term = (int) si.nextOrd();
do {
segCounts[1+term]++;
} while ((term = (int)si.nextOrd()) >= 0);
+ } else {
+ counts[0]++; // missing
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/request/DocValuesStats.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/request/DocValuesStats.java b/solr/core/src/java/org/apache/solr/request/DocValuesStats.java
index 4001f5a..efc5cf7 100644
--- a/solr/core/src/java/org/apache/solr/request/DocValuesStats.java
+++ b/solr/core/src/java/org/apache/solr/request/DocValuesStats.java
@@ -20,9 +20,9 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.MultiDocValues.MultiSortedDocValues;
+import org.apache.lucene.index.LeafReaderContext;
+import org.apache.lucene.index.MultiDocValues;
import org.apache.lucene.index.MultiDocValues.MultiSortedSetDocValues;
import org.apache.lucene.index.MultiDocValues.OrdinalMap;
import org.apache.lucene.index.SortedDocValues;
@@ -86,13 +86,13 @@ public class DocValuesStats {
si = searcher.getLeafReader().getSortedSetDocValues(fieldName);
if (si instanceof MultiSortedSetDocValues) {
- ordinalMap = ((MultiSortedSetDocValues)si).mapping;
+ ordinalMap = ((MultiDocValues.MultiSortedSetDocValues)si).mapping;
}
} else {
SortedDocValues single = searcher.getLeafReader().getSortedDocValues(fieldName);
si = single == null ? null : DocValues.singleton(single);
- if (single instanceof MultiSortedDocValues) {
- ordinalMap = ((MultiSortedDocValues)single).mapping;
+ if (single instanceof MultiDocValues.MultiSortedDocValues) {
+ ordinalMap = ((MultiDocValues.MultiSortedDocValues)single).mapping;
}
}
if (si == null) {
@@ -127,7 +127,7 @@ public class DocValuesStats {
if (sub == null) {
sub = DocValues.emptySortedSet();
}
- final SortedDocValues singleton = DocValues.unwrapSingleton(sub);
+ SortedDocValues singleton = DocValues.unwrapSingleton(sub);
if (singleton != null) {
// some codecs may optimize SORTED_SET storage for single-valued fields
missingDocCountTotal += accumSingle(counts, docBase, facetStats, singleton, disi, subIndex, ordinalMap);
@@ -174,8 +174,11 @@ public class DocValuesStats {
int missingDocCount = 0;
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- int term = si.getOrd(doc);
- if (term >= 0) {
+ if (doc > si.docID()) {
+ si.advance(doc);
+ }
+ if (doc == si.docID()) {
+ int term = si.ordValue();
if (map != null) {
term = (int) ordMap.get(term);
}
@@ -201,21 +204,22 @@ public class DocValuesStats {
int missingDocCount = 0;
int doc;
while ((doc = disi.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- si.setDocument(doc);
- long ord;
- boolean emptyTerm = true;
- while ((ord = si.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
- emptyTerm = false;
- int term = (int) ord;
- if (map != null) {
- term = (int) ordMap.get(term);
- }
- counts[term]++;
- for (FieldFacetStats f : facetStats) {
- f.facetTermNum(docBase + doc, term);
- }
+ if (doc > si.docID()) {
+ si.advance(doc);
}
- if (emptyTerm){
+ if (doc == si.docID()) {
+ long ord;
+ while ((ord = si.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
+ int term = (int) ord;
+ if (map != null) {
+ term = (int) ordMap.get(term);
+ }
+ counts[term]++;
+ for (FieldFacetStats f : facetStats) {
+ f.facetTermNum(docBase + doc, term);
+ }
+ }
+ } else {
for (FieldFacetStats f : facetStats) {
f.facetMissingNum(docBase + doc);
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/request/IntervalFacets.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/request/IntervalFacets.java b/solr/core/src/java/org/apache/solr/request/IntervalFacets.java
index db26e12..6187feb 100644
--- a/solr/core/src/java/org/apache/solr/request/IntervalFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/IntervalFacets.java
@@ -25,12 +25,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import org.apache.lucene.legacy.LegacyNumericType;
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DocValues;
+import org.apache.lucene.index.FilterNumericDocValues;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedDocValues;
import org.apache.lucene.index.SortedSetDocValues;
+import org.apache.lucene.legacy.LegacyNumericType;
import org.apache.lucene.search.DocIdSet;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.util.Bits;
@@ -182,7 +183,6 @@ public class IntervalFacets implements Iterable<FacetInterval> {
final Iterator<LeafReaderContext> ctxIt = leaves.iterator();
LeafReaderContext ctx = null;
NumericDocValues longs = null;
- Bits docsWithField = null;
for (DocIterator docsIt = docs.iterator(); docsIt.hasNext(); ) {
final int doc = docsIt.nextDoc();
if (ctx == null || doc >= ctx.docBase + ctx.reader().maxDoc()) {
@@ -198,24 +198,22 @@ public class IntervalFacets implements Iterable<FacetInterval> {
longs = DocValues.getNumeric(ctx.reader(), fieldName);
break;
case FLOAT:
- final NumericDocValues floats = DocValues.getNumeric(ctx.reader(), fieldName);
// TODO: this bit flipping should probably be moved to tie-break in the PQ comparator
- longs = new NumericDocValues() {
+ longs = new FilterNumericDocValues(DocValues.getNumeric(ctx.reader(), fieldName)) {
@Override
- public long get(int docID) {
- long bits = floats.get(docID);
+ public long longValue() {
+ long bits = super.longValue();
if (bits < 0) bits ^= 0x7fffffffffffffffL;
return bits;
}
};
break;
case DOUBLE:
- final NumericDocValues doubles = DocValues.getNumeric(ctx.reader(), fieldName);
// TODO: this bit flipping should probably be moved to tie-break in the PQ comparator
- longs = new NumericDocValues() {
+ longs = new FilterNumericDocValues(DocValues.getNumeric(ctx.reader(), fieldName)) {
@Override
- public long get(int docID) {
- long bits = doubles.get(docID);
+ public long longValue() {
+ long bits = super.longValue();
if (bits < 0) bits ^= 0x7fffffffffffffffL;
return bits;
}
@@ -224,11 +222,13 @@ public class IntervalFacets implements Iterable<FacetInterval> {
default:
throw new AssertionError();
}
- docsWithField = DocValues.getDocsWithField(ctx.reader(), schemaField.getName());
}
- long v = longs.get(doc - ctx.docBase);
- if (v != 0 || docsWithField.get(doc - ctx.docBase)) {
- accumIntervalWithValue(v);
+ int valuesDocID = longs.docID();
+ if (valuesDocID < doc - ctx.docBase) {
+ valuesDocID = longs.advance(doc - ctx.docBase);
+ }
+ if (valuesDocID == doc - ctx.docBase) {
+ accumIntervalWithValue(longs.longValue());
}
}
}
@@ -279,14 +279,17 @@ public class IntervalFacets implements Iterable<FacetInterval> {
if (bits != null && bits.get(doc) == false) {
continue;
}
- ssdv.setDocument(doc);
- long currOrd;
- int currentInterval = 0;
- while ((currOrd = ssdv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
- boolean evaluateNextInterval = true;
- while (evaluateNextInterval && currentInterval < intervals.length) {
- IntervalCompareResult result = intervals[currentInterval].includes(currOrd);
- switch (result) {
+ if (doc > ssdv.docID()) {
+ ssdv.advance(doc);
+ }
+ if (doc == ssdv.docID()) {
+ long currOrd;
+ int currentInterval = 0;
+ while ((currOrd = ssdv.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) {
+ boolean evaluateNextInterval = true;
+ while (evaluateNextInterval && currentInterval < intervals.length) {
+ IntervalCompareResult result = intervals[currentInterval].includes(currOrd);
+ switch (result) {
case INCLUDED:
/*
* Increment the current interval and move to the next one using
@@ -308,6 +311,7 @@ public class IntervalFacets implements Iterable<FacetInterval> {
*/
currentInterval++;
break;
+ }
}
}
}
@@ -324,9 +328,11 @@ public class IntervalFacets implements Iterable<FacetInterval> {
if (bits != null && bits.get(doc) == false) {
continue;
}
- int ord = sdv.getOrd(doc);
- if (ord >= 0) {
- accumInterval(ord);
+ if (doc > sdv.docID()) {
+ sdv.advance(doc);
+ }
+ if (doc == sdv.docID()) {
+ accumInterval(sdv.ordValue());
}
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f7aa200d/solr/core/src/java/org/apache/solr/request/NumericFacets.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/request/NumericFacets.java b/solr/core/src/java/org/apache/solr/request/NumericFacets.java
index fd85d3f..9df0ca6 100644
--- a/solr/core/src/java/org/apache/solr/request/NumericFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/NumericFacets.java
@@ -27,8 +27,9 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.DocValues;
+import org.apache.lucene.index.FilterNumericDocValues;
+import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.ReaderUtil;
import org.apache.lucene.index.Terms;
@@ -161,25 +162,23 @@ final class NumericFacets {
longs = DocValues.getNumeric(ctx.reader(), fieldName);
break;
case FLOAT:
- final NumericDocValues floats = DocValues.getNumeric(ctx.reader(), fieldName);
// TODO: this bit flipping should probably be moved to tie-break in the PQ comparator
- longs = new NumericDocValues() {
+ longs = new FilterNumericDocValues(DocValues.getNumeric(ctx.reader(), fieldName)) {
@Override
- public long get(int docID) {
- long bits = floats.get(docID);
- if (bits<0) bits ^= 0x7fffffffffffffffL;
+ public long longValue() {
+ long bits = super.longValue();
+ if (bits < 0) bits ^= 0x7fffffffffffffffL;
return bits;
}
};
break;
case DOUBLE:
- final NumericDocValues doubles = DocValues.getNumeric(ctx.reader(), fieldName);
// TODO: this bit flipping should probably be moved to tie-break in the PQ comparator
- longs = new NumericDocValues() {
+ longs = new FilterNumericDocValues(DocValues.getNumeric(ctx.reader(), fieldName)) {
@Override
- public long get(int docID) {
- long bits = doubles.get(docID);
- if (bits<0) bits ^= 0x7fffffffffffffffL;
+ public long longValue() {
+ long bits = super.longValue();
+ if (bits < 0) bits ^= 0x7fffffffffffffffL;
return bits;
}
};
@@ -187,11 +186,13 @@ final class NumericFacets {
default:
throw new AssertionError();
}
- docsWithField = DocValues.getDocsWithField(ctx.reader(), fieldName);
}
- long v = longs.get(doc - ctx.docBase);
- if (v != 0 || docsWithField.get(doc - ctx.docBase)) {
- hashTable.add(doc, v, 1);
+ int valuesDocID = longs.docID();
+ if (valuesDocID < doc - ctx.docBase) {
+ valuesDocID = longs.advance(doc - ctx.docBase);
+ }
+ if (valuesDocID == doc - ctx.docBase) {
+ hashTable.add(doc, longs.longValue(), 1);
} else {
++missingCount;
}