diff options
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.java | 49 |
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) { |