summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java')
-rw-r--r--core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java49
1 files changed, 25 insertions, 24 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java b/core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java
index 48b6a1127a..c433836417 100644
--- a/core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java
+++ b/core/src/main/java/org/elasticsearch/index/fielddata/fieldcomparator/BytesRefFieldComparatorSource.java
@@ -21,15 +21,15 @@ package org.elasticsearch.index.fielddata.fieldcomparator;
import org.apache.lucene.index.BinaryDocValues;
import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.index.RandomAccessOrds;
import org.apache.lucene.index.SortedDocValues;
+import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.FieldComparator;
import org.apache.lucene.search.Scorer;
import org.apache.lucene.search.SortField;
import org.apache.lucene.util.BitSet;
-import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
+import org.elasticsearch.index.fielddata.AbstractSortedDocValues;
import org.elasticsearch.index.fielddata.IndexFieldData;
import org.elasticsearch.index.fielddata.IndexOrdinalsFieldData;
import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
@@ -89,7 +89,7 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
@Override
protected SortedDocValues getSortedDocValues(LeafReaderContext context, String field) throws IOException {
- final RandomAccessOrds values = ((IndexOrdinalsFieldData) indexFieldData).load(context).getOrdinalsValues();
+ final SortedSetDocValues values = ((IndexOrdinalsFieldData) indexFieldData).load(context).getOrdinalsValues();
final SortedDocValues selectedValues;
if (nested == null) {
selectedValues = sortMode.select(values);
@@ -113,8 +113,6 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
};
}
- final BytesRef nullPlaceHolder = new BytesRef();
- final BytesRef nonNullMissingBytes = missingBytes == null ? nullPlaceHolder : missingBytes;
return new FieldComparator.TermValComparator(numHits, null, sortMissingLast) {
@Override
@@ -122,26 +120,16 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
final SortedBinaryDocValues values = getValues(context);
final BinaryDocValues selectedValues;
if (nested == null) {
- selectedValues = sortMode.select(values, nonNullMissingBytes);
+ selectedValues = sortMode.select(values, missingBytes);
} else {
final BitSet rootDocs = nested.rootDocs(context);
final DocIdSetIterator innerDocs = nested.innerDocs(context);
- selectedValues = sortMode.select(values, nonNullMissingBytes, rootDocs, innerDocs, context.reader().maxDoc());
+ selectedValues = sortMode.select(values, missingBytes, rootDocs, innerDocs, context.reader().maxDoc());
}
return selectedValues;
}
@Override
- protected Bits getDocsWithField(LeafReaderContext context, String field) throws IOException {
- return new Bits.MatchAllBits(context.reader().maxDoc());
- }
-
- @Override
- protected boolean isNull(int doc, BytesRef term) {
- return term == nullPlaceHolder;
- }
-
- @Override
public void setScorer(Scorer scorer) {
BytesRefFieldComparatorSource.this.setScorer(scorer);
}
@@ -154,13 +142,14 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
* are replaced with the specified term
*/
// TODO: move this out if we need it for other reasons
- static class ReplaceMissing extends SortedDocValues {
+ static class ReplaceMissing extends AbstractSortedDocValues {
final SortedDocValues in;
final int substituteOrd;
final BytesRef substituteTerm;
final boolean exists;
+ boolean hasValue;
- ReplaceMissing(SortedDocValues in, BytesRef term) {
+ ReplaceMissing(SortedDocValues in, BytesRef term) throws IOException {
this.in = in;
this.substituteTerm = term;
int sub = in.lookupTerm(term);
@@ -174,11 +163,12 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
}
@Override
- public int getOrd(int docID) {
- int ord = in.getOrd(docID);
- if (ord < 0) {
+ public int ordValue() throws IOException {
+ if (hasValue == false) {
return substituteOrd;
- } else if (exists == false && ord >= substituteOrd) {
+ }
+ int ord = in.ordValue();
+ if (exists == false && ord >= substituteOrd) {
return ord + 1;
} else {
return ord;
@@ -186,6 +176,17 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
}
@Override
+ public boolean advanceExact(int target) throws IOException {
+ hasValue = in.advanceExact(target);
+ return true;
+ }
+
+ @Override
+ public int docID() {
+ return in.docID();
+ }
+
+ @Override
public int getValueCount() {
if (exists) {
return in.getValueCount();
@@ -195,7 +196,7 @@ public class BytesRefFieldComparatorSource extends IndexFieldData.XFieldComparat
}
@Override
- public BytesRef lookupOrd(int ord) {
+ public BytesRef lookupOrd(int ord) throws IOException {
if (ord == substituteOrd) {
return substituteTerm;
} else if (exists == false && ord > substituteOrd) {