Field data diet.

We have lots of unused, or almost unused methods in our field data impls,
especially when dealing with ordinals. Let's nuke them.

Close #5874
This commit is contained in:
Adrien Grand 2014-04-18 14:55:29 +02:00
parent 54612ee2b5
commit b3e0e58094
42 changed files with 180 additions and 644 deletions

View File

@ -33,11 +33,6 @@ public interface AtomicFieldData<Script extends ScriptDocValues> extends RamUsag
*/
boolean isMultiValued();
/**
* The number of docs in this field data.
*/
int getNumDocs();
/**
* An upper limit of the number of unique values in this atomic field data.
*/

View File

@ -153,7 +153,7 @@ public final class BytesRefOrdValComparator extends NestedWrappableComparator<By
public PerSegmentComparator(BytesValues.WithOrdinals termsIndex) {
this.readerOrds = termsIndex.ordinals();
this.termsIndex = termsIndex;
if (readerOrds.getNumOrds() > Long.MAX_VALUE / 4) {
if (readerOrds.getMaxOrd() > Long.MAX_VALUE / 4) {
throw new IllegalStateException("Current terms index pretends it has more than " + (Long.MAX_VALUE / 4) + " ordinals, which is unsupported by this impl");
}
}
@ -297,7 +297,7 @@ public final class BytesRefOrdValComparator extends NestedWrappableComparator<By
@Override
public FieldComparator<BytesRef> setNextReader(AtomicReaderContext context) throws IOException {
termsIndex = indexFieldData.load(context).getBytesValues(false);
assert termsIndex.ordinals() != null && termsIndex.ordinals().ordinals() != null;
assert termsIndex.ordinals() != null;
if (missingValue == null) {
missingOrd = Ordinals.MISSING_ORDINAL;
} else {
@ -305,7 +305,7 @@ public final class BytesRefOrdValComparator extends NestedWrappableComparator<By
assert consistentInsertedOrd(termsIndex, missingOrd, missingValue);
}
FieldComparator<BytesRef> perSegComp = null;
assert termsIndex.ordinals() != null && termsIndex.ordinals().ordinals() != null;
assert termsIndex.ordinals() != null;
if (termsIndex.isMultiValued()) {
perSegComp = new PerSegmentComparator(termsIndex) {
@Override
@ -368,7 +368,7 @@ public final class BytesRefOrdValComparator extends NestedWrappableComparator<By
}
final protected static long binarySearch(BytesValues.WithOrdinals a, BytesRef key) {
return binarySearch(a, key, 1, a.ordinals().getNumOrds());
return binarySearch(a, key, Ordinals.MIN_ORDINAL, a.ordinals().getMaxOrd() - 1);
}
final protected static long binarySearch(BytesValues.WithOrdinals a, BytesRef key, long low, long high) {

View File

@ -48,19 +48,9 @@ public class DocIdOrdinals implements Ordinals {
return false;
}
@Override
public int getNumDocs() {
return numDocs;
}
@Override
public long getNumOrds() {
return numDocs;
}
@Override
public long getMaxOrd() {
return 1L + numDocs;
return Ordinals.MIN_ORDINAL + numDocs;
}
@Override
@ -68,40 +58,14 @@ public class DocIdOrdinals implements Ordinals {
return new Docs(this);
}
public static class Docs implements Ordinals.Docs {
public static class Docs extends Ordinals.AbstractDocs {
private final DocIdOrdinals parent;
private final LongsRef longsScratch = new LongsRef(new long[1], 0, 1);
private int docId = -1;
private long currentOrdinal = -1;
public Docs(DocIdOrdinals parent) {
this.parent = parent;
}
@Override
public Ordinals ordinals() {
return parent;
}
@Override
public int getNumDocs() {
return parent.getNumDocs();
}
@Override
public long getNumOrds() {
return parent.getNumOrds();
}
@Override
public long getMaxOrd() {
return parent.getMaxOrd();
}
@Override
public boolean isMultiValued() {
return false;
super(parent);
}
@Override
@ -109,12 +73,6 @@ public class DocIdOrdinals implements Ordinals {
return currentOrdinal = docId + 1;
}
@Override
public LongsRef getOrds(int docId) {
longsScratch.longs[0] = currentOrdinal = docId + 1;
return longsScratch;
}
@Override
public long nextOrd() {
assert docId >= 0;

View File

@ -24,13 +24,8 @@ import org.elasticsearch.ElasticsearchIllegalStateException;
/**
*/
public class EmptyOrdinals implements Ordinals {
private final int numDocs;
public EmptyOrdinals(int numDocs) {
this.numDocs = numDocs;
}
public enum EmptyOrdinals implements Ordinals {
INSTANCE;
@Override
public long getMemorySizeInBytes() {
@ -42,16 +37,6 @@ public class EmptyOrdinals implements Ordinals {
return false;
}
@Override
public int getNumDocs() {
return this.numDocs;
}
@Override
public long getNumOrds() {
return 0;
}
@Override
public long getMaxOrd() {
return 1;
@ -62,37 +47,11 @@ public class EmptyOrdinals implements Ordinals {
return new Docs(this);
}
public static class Docs implements Ordinals.Docs {
private final EmptyOrdinals parent;
public static class Docs extends Ordinals.AbstractDocs {
public static final LongsRef EMPTY_LONGS_REF = new LongsRef();
public Docs(EmptyOrdinals parent) {
this.parent = parent;
}
@Override
public Ordinals ordinals() {
return parent;
}
@Override
public int getNumDocs() {
return parent.getNumDocs();
}
@Override
public long getNumOrds() {
return 0;
}
@Override
public long getMaxOrd() {
return 1;
}
@Override
public boolean isMultiValued() {
return false;
super(parent);
}
@Override
@ -100,11 +59,6 @@ public class EmptyOrdinals implements Ordinals {
return 0;
}
@Override
public LongsRef getOrds(int docId) {
return EMPTY_LONGS_REF;
}
@Override
public long nextOrd() {
throw new ElasticsearchIllegalStateException("Empty ordinals has no nextOrd");

View File

@ -161,11 +161,6 @@ public final class GlobalOrdinalsIndexFieldData extends AbstractIndexComponent i
return afd.isMultiValued();
}
@Override
public int getNumDocs() {
return afd.getNumDocs();
}
@Override
public long getNumberUniqueValues() {
return afd.getNumberUniqueValues();

View File

@ -24,7 +24,6 @@ import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefIterator;
import org.apache.lucene.util.LongsRef;
import org.apache.lucene.util.PriorityQueue;
import org.apache.lucene.util.packed.AppendingPackedLongBuffer;
import org.apache.lucene.util.packed.MonotonicAppendingLongBuffer;
@ -140,51 +139,6 @@ public class InternalGlobalOrdinalsBuilder extends AbstractIndexComponent implem
this.maxOrd = maxOrd;
}
@Override
public final Ordinals ordinals() {
return new Ordinals() {
@Override
public long getMemorySizeInBytes() {
return memorySizeInBytes;
}
@Override
public boolean isMultiValued() {
return GlobalOrdinalMapping.this.isMultiValued();
}
@Override
public int getNumDocs() {
return GlobalOrdinalMapping.this.getNumDocs();
}
@Override
public long getNumOrds() {
return GlobalOrdinalMapping.this.getNumOrds();
}
@Override
public long getMaxOrd() {
return GlobalOrdinalMapping.this.getMaxOrd();
}
@Override
public Docs ordinals() {
return GlobalOrdinalMapping.this;
}
};
}
@Override
public final int getNumDocs() {
return segmentOrdinals.getNumDocs();
}
@Override
public final long getNumOrds() {
return maxOrd - Ordinals.MIN_ORDINAL;
}
@Override
public final long getMaxOrd() {
return maxOrd;
@ -211,15 +165,6 @@ public class InternalGlobalOrdinalsBuilder extends AbstractIndexComponent implem
return currentGlobalOrd = getGlobalOrd(segmentOrd);
}
@Override
public final LongsRef getOrds(int docId) {
LongsRef refs = segmentOrdinals.getOrds(docId);
for (int i = refs.offset; i < refs.length; i++) {
refs.longs[i] = getGlobalOrd(refs.longs[i]);
}
return refs;
}
@Override
public final long nextOrd() {
long segmentOrd = segmentOrdinals.nextOrd();

View File

@ -19,9 +19,7 @@
package org.elasticsearch.index.fielddata.ordinals;
import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.LongsRef;
import org.apache.lucene.util.RamUsageEstimator;
import org.apache.lucene.util.packed.AppendingPackedLongBuffer;
import org.apache.lucene.util.packed.MonotonicAppendingLongBuffer;
import org.apache.lucene.util.packed.PackedInts;
@ -86,16 +84,6 @@ public class MultiOrdinals implements Ordinals {
return multiValued;
}
@Override
public int getNumDocs() {
return (int) endOffsets.size();
}
@Override
public long getNumOrds() {
return numOrds;
}
@Override
public long getMaxOrd() {
return numOrds + 1;
@ -106,9 +94,8 @@ public class MultiOrdinals implements Ordinals {
return new MultiDocs(this);
}
static class MultiDocs implements Ordinals.Docs {
static class MultiDocs extends Ordinals.AbstractDocs {
private final MultiOrdinals ordinals;
private final MonotonicAppendingLongBuffer endOffsets;
private final AppendingPackedLongBuffer ords;
private final LongsRef longsScratch;
@ -117,37 +104,12 @@ public class MultiOrdinals implements Ordinals {
private long currentOrd;
MultiDocs(MultiOrdinals ordinals) {
this.ordinals = ordinals;
super(ordinals);
this.endOffsets = ordinals.endOffsets;
this.ords = ordinals.ords;
this.longsScratch = new LongsRef(16);
}
@Override
public Ordinals ordinals() {
return this.ordinals;
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public long getNumOrds() {
return ordinals.getNumOrds();
}
@Override
public long getMaxOrd() {
return ordinals.getMaxOrd();
}
@Override
public boolean isMultiValued() {
return ordinals.isMultiValued();
}
@Override
public long getOrd(int docId) {
final long startOffset = docId > 0 ? endOffsets.get(docId - 1) : 0;
@ -159,22 +121,6 @@ public class MultiOrdinals implements Ordinals {
}
}
@Override
public LongsRef getOrds(int docId) {
final long startOffset = docId > 0 ? endOffsets.get(docId - 1) : 0;
final long endOffset = endOffsets.get(docId);
final int numValues = (int) (endOffset - startOffset);
if (longsScratch.length < numValues) {
longsScratch.longs = new long[ArrayUtil.oversize(numValues, RamUsageEstimator.NUM_BYTES_LONG)];
}
for (int i = 0; i < numValues; ++i) {
longsScratch.longs[i] = 1L + ords.get(startOffset + i);
}
longsScratch.offset = 0;
longsScratch.length = numValues;
return longsScratch;
}
@Override
public long nextOrd() {
assert offset < limit;

View File

@ -19,7 +19,6 @@
package org.elasticsearch.index.fielddata.ordinals;
import org.apache.lucene.util.LongsRef;
/**
* A thread safe ordinals abstraction. Ordinals can only be positive integers.
@ -39,16 +38,6 @@ public interface Ordinals {
*/
boolean isMultiValued();
/**
* The number of docs in this ordinals.
*/
int getNumDocs();
/**
* The number of ordinals, excluding the {@link #MISSING_ORDINAL} ordinal indicating a missing value.
*/
long getNumOrds();
/**
* Returns total unique ord count; this includes +1 for
* the {@link #MISSING_ORDINAL} ord (always {@value #MISSING_ORDINAL} ).
@ -78,21 +67,6 @@ public interface Ordinals {
*/
interface Docs {
/**
* Returns the original ordinals used to generate this Docs "itereator".
*/
Ordinals ordinals();
/**
* The number of docs in this ordinals.
*/
int getNumDocs();
/**
* The number of ordinals, excluding the "0" ordinal (indicating a missing value).
*/
long getNumOrds();
/**
* Returns total unique ord count; this includes +1 for
* the null ord (always 0).
@ -110,12 +84,6 @@ public interface Ordinals {
*/
long getOrd(int docId);
/**
* Returns an array of ordinals matching the docIds, with 0 length one
* for a doc with no ordinals.
*/
LongsRef getOrds(int docId);
/**
* Returns the next ordinal for the current docID set to {@link #setDocument(int)}.
@ -147,4 +115,27 @@ public interface Ordinals {
long currentOrd();
}
/**
* Base implementation of {@link Docs}.
*/
public static abstract class AbstractDocs implements Docs {
protected final Ordinals ordinals;
public AbstractDocs(Ordinals ordinals) {
this.ordinals = ordinals;
}
@Override
public final long getMaxOrd() {
return ordinals.getMaxOrd();
}
@Override
public final boolean isMultiValued() {
return ordinals.isMultiValued();
}
}
}

View File

@ -29,17 +29,15 @@ public class SinglePackedOrdinals implements Ordinals {
// ordinals with value 0 indicates no value
private final PackedInts.Reader reader;
private final long numOrds;
private final long maxOrd;
private long size = -1;
public SinglePackedOrdinals(OrdinalsBuilder builder, float acceptableOverheadRatio) {
assert builder.getNumMultiValuesDocs() == 0;
this.numOrds = builder.getNumOrds();
this.maxOrd = builder.getNumOrds() + 1;
// We don't reuse the builder as-is because it might have been built with a higher overhead ratio
final PackedInts.Mutable reader = PackedInts.getMutable(builder.maxDoc(), PackedInts.bitsRequired(getNumOrds()), acceptableOverheadRatio);
final PackedInts.Mutable reader = PackedInts.getMutable(builder.maxDoc(), PackedInts.bitsRequired(getMaxOrd() - 1), acceptableOverheadRatio);
PackedInts.copy(builder.getFirstOrdinals(), 0, reader, 0, builder.maxDoc(), 8 * 1024);
this.reader = reader;
}
@ -57,16 +55,6 @@ public class SinglePackedOrdinals implements Ordinals {
return false;
}
@Override
public int getNumDocs() {
return reader.size();
}
@Override
public long getNumOrds() {
return numOrds;
}
@Override
public long getMaxOrd() {
return maxOrd;
@ -77,58 +65,23 @@ public class SinglePackedOrdinals implements Ordinals {
return new Docs(this, reader);
}
public static class Docs implements Ordinals.Docs {
public static class Docs extends Ordinals.AbstractDocs {
private final SinglePackedOrdinals parent;
private final PackedInts.Reader reader;
private final LongsRef longsScratch = new LongsRef(1);
private long currentOrdinal;
public Docs(SinglePackedOrdinals parent, PackedInts.Reader reader) {
this.parent = parent;
super(parent);
this.reader = reader;
}
@Override
public Ordinals ordinals() {
return parent;
}
@Override
public int getNumDocs() {
return parent.getNumDocs();
}
@Override
public long getNumOrds() {
return parent.getNumOrds();
}
@Override
public long getMaxOrd() {
return parent.getMaxOrd();
}
@Override
public boolean isMultiValued() {
return false;
}
@Override
public long getOrd(int docId) {
return currentOrdinal = reader.get(docId);
}
@Override
public LongsRef getOrds(int docId) {
final long ordinal = reader.get(docId);
longsScratch.offset = 0;
longsScratch.length = (int)Math.min(currentOrdinal, 1);
longsScratch.longs[0] = currentOrdinal = ordinal;
return longsScratch;
}
@Override
public long nextOrd() {
assert currentOrdinal > 0;

View File

@ -38,12 +38,6 @@ abstract class AbstractGeoPointIndexFieldData extends AbstractIndexFieldData<Ato
protected static class Empty extends AtomicGeoPointFieldData<ScriptDocValues> {
private final int numDocs;
Empty(int numDocs) {
this.numDocs = numDocs;
}
@Override
public boolean isMultiValued() {
return false;
@ -74,11 +68,6 @@ abstract class AbstractGeoPointIndexFieldData extends AbstractIndexFieldData<Ato
return ScriptDocValues.EMPTY_GEOPOINTS;
}
@Override
public int getNumDocs() {
return numDocs;
}
@Override
public void close() {
// no-op

View File

@ -47,11 +47,6 @@ public class BinaryDVAtomicFieldData implements AtomicFieldData<ScriptDocValues.
return false;
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumberUniqueValues() {
// probably not accurate, but a good upper limit

View File

@ -144,11 +144,6 @@ final class BinaryDVNumericAtomicFieldData extends AbstractAtomicNumericFieldDat
return true; // no way to know
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumberUniqueValues() {
return Long.MAX_VALUE; // no clue

View File

@ -43,11 +43,6 @@ final class BytesBinaryDVAtomicFieldData implements AtomicFieldData<ScriptDocVal
return true;
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumberUniqueValues() {
return Long.MAX_VALUE;

View File

@ -29,32 +29,24 @@ import org.elasticsearch.index.fielddata.ordinals.Ordinals;
*/
public abstract class DoubleArrayAtomicFieldData extends AbstractAtomicNumericFieldData {
public static DoubleArrayAtomicFieldData empty(int numDocs) {
return new Empty(numDocs);
public static DoubleArrayAtomicFieldData empty() {
return new Empty();
}
private final int numDocs;
protected long size = -1;
public DoubleArrayAtomicFieldData(int numDocs) {
public DoubleArrayAtomicFieldData() {
super(true);
this.numDocs = numDocs;
}
@Override
public void close() {
}
@Override
public int getNumDocs() {
return numDocs;
}
static class Empty extends DoubleArrayAtomicFieldData {
Empty(int numDocs) {
super(numDocs);
Empty() {
super();
}
@Override
@ -98,8 +90,8 @@ public abstract class DoubleArrayAtomicFieldData extends AbstractAtomicNumericFi
private final BigDoubleArrayList values;
private final Ordinals ordinals;
public WithOrdinals(BigDoubleArrayList values, int numDocs, Ordinals ordinals) {
super(numDocs);
public WithOrdinals(BigDoubleArrayList values, Ordinals ordinals) {
super();
this.values = values;
this.ordinals = ordinals;
}
@ -111,13 +103,13 @@ public abstract class DoubleArrayAtomicFieldData extends AbstractAtomicNumericFi
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + values.sizeInBytes() + ordinals.getMemorySizeInBytes();
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + values.sizeInBytes() + ordinals.getMemorySizeInBytes();
}
return size;
}
@ -177,8 +169,8 @@ public abstract class DoubleArrayAtomicFieldData extends AbstractAtomicNumericFi
private final FixedBitSet set;
private final long numOrds;
public SingleFixedSet(BigDoubleArrayList values, int numDocs, FixedBitSet set, long numOrds) {
super(numDocs);
public SingleFixedSet(BigDoubleArrayList values, FixedBitSet set, long numOrds) {
super();
this.values = values;
this.set = set;
this.numOrds = numOrds;
@ -271,8 +263,8 @@ public abstract class DoubleArrayAtomicFieldData extends AbstractAtomicNumericFi
* Note, here, we assume that there is no offset by 1 from docId, so position 0
* is the value for docId 0.
*/
public Single(BigDoubleArrayList values, int numDocs, long numOrds) {
super(numDocs);
public Single(BigDoubleArrayList values, long numOrds) {
super();
this.values = values;
this.numOrds = numOrds;
}

View File

@ -81,7 +81,7 @@ public class DoubleArrayIndexFieldData extends AbstractIndexFieldData<DoubleArra
// TODO: Use an actual estimator to estimate before loading.
NonEstimatingEstimator estimator = new NonEstimatingEstimator(breakerService.getBreaker());
if (terms == null) {
data = DoubleArrayAtomicFieldData.empty(reader.maxDoc());
data = DoubleArrayAtomicFieldData.empty();
estimator.afterLoad(null, data.getMemorySizeInBytes());
return data;
}
@ -99,7 +99,7 @@ public class DoubleArrayIndexFieldData extends AbstractIndexFieldData<DoubleArra
}
Ordinals build = builder.build(fieldDataType.getSettings());
if (build.isMultiValued() || CommonSettings.getMemoryStorageHint(fieldDataType) == CommonSettings.MemoryStorageFormat.ORDINALS) {
data = new DoubleArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new DoubleArrayAtomicFieldData.WithOrdinals(values, build);
} else {
Docs ordinals = build.ordinals();
final FixedBitSet set = builder.buildDocsWithValuesSet();
@ -109,7 +109,7 @@ public class DoubleArrayIndexFieldData extends AbstractIndexFieldData<DoubleArra
long uniqueValuesArraySize = values.sizeInBytes();
long ordinalsSize = build.getMemorySizeInBytes();
if (uniqueValuesArraySize + ordinalsSize < singleValuesArraySize) {
data = new DoubleArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new DoubleArrayAtomicFieldData.WithOrdinals(values, build);
success = true;
return data;
}
@ -121,9 +121,9 @@ public class DoubleArrayIndexFieldData extends AbstractIndexFieldData<DoubleArra
}
assert sValues.size() == maxDoc;
if (set == null) {
data = new DoubleArrayAtomicFieldData.Single(sValues, maxDoc, ordinals.getNumOrds());
data = new DoubleArrayAtomicFieldData.Single(sValues, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new DoubleArrayAtomicFieldData.SingleFixedSet(sValues, maxDoc, set, ordinals.getNumOrds());
data = new DoubleArrayAtomicFieldData.SingleFixedSet(sValues, set, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
}
success = true;

View File

@ -38,8 +38,8 @@ import java.io.IOException;
*/
public class FSTBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> {
public static FSTBytesAtomicFieldData empty(int numDocs) {
return new Empty(numDocs);
public static FSTBytesAtomicFieldData empty() {
return new Empty();
}
// 0 ordinal in values means no value (its null)
@ -64,14 +64,9 @@ public class FSTBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<Scr
return ordinals.isMultiValued();
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
@ -180,8 +175,8 @@ public class FSTBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<Scr
final static class Empty extends FSTBytesAtomicFieldData {
Empty(int numDocs) {
super(null, new EmptyOrdinals(numDocs));
Empty() {
super(null, EmptyOrdinals.INSTANCE);
}
@Override
@ -189,11 +184,6 @@ public class FSTBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<Scr
return false;
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public BytesValues.WithOrdinals getBytesValues(boolean needsHashes) {
return new EmptyByteValuesWithOrdinals(ordinals.ordinals());

View File

@ -69,7 +69,7 @@ public class FSTBytesIndexFieldData extends AbstractBytesIndexFieldData<FSTBytes
// TODO: Use an actual estimator to estimate before loading.
NonEstimatingEstimator estimator = new NonEstimatingEstimator(breakerService.getBreaker());
if (terms == null) {
data = FSTBytesAtomicFieldData.empty(reader.maxDoc());
data = FSTBytesAtomicFieldData.empty();
estimator.afterLoad(null, data.getMemorySizeInBytes());
return data;
}

View File

@ -28,32 +28,24 @@ import org.elasticsearch.index.fielddata.ordinals.Ordinals;
*/
public abstract class FloatArrayAtomicFieldData extends AbstractAtomicNumericFieldData {
public static FloatArrayAtomicFieldData empty(int numDocs) {
return new Empty(numDocs);
public static FloatArrayAtomicFieldData empty() {
return new Empty();
}
private final int numDocs;
protected long size = -1;
public FloatArrayAtomicFieldData(int numDocs) {
public FloatArrayAtomicFieldData() {
super(true);
this.numDocs = numDocs;
}
@Override
public void close() {
}
@Override
public int getNumDocs() {
return numDocs;
}
static class Empty extends FloatArrayAtomicFieldData {
Empty(int numDocs) {
super(numDocs);
Empty() {
super();
}
@Override
@ -97,8 +89,8 @@ public abstract class FloatArrayAtomicFieldData extends AbstractAtomicNumericFie
private final Ordinals ordinals;
private final BigFloatArrayList values;
public WithOrdinals(BigFloatArrayList values, int numDocs, Ordinals ordinals) {
super(numDocs);
public WithOrdinals(BigFloatArrayList values, Ordinals ordinals) {
super();
this.values = values;
this.ordinals = ordinals;
}
@ -110,13 +102,13 @@ public abstract class FloatArrayAtomicFieldData extends AbstractAtomicNumericFie
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + values.sizeInBytes() + ordinals.getMemorySizeInBytes();
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + values.sizeInBytes() + ordinals.getMemorySizeInBytes();
}
return size;
}
@ -173,8 +165,8 @@ public abstract class FloatArrayAtomicFieldData extends AbstractAtomicNumericFie
private final FixedBitSet set;
private final long numOrd;
public SingleFixedSet(BigFloatArrayList values, int numDocs, FixedBitSet set, long numOrd) {
super(numDocs);
public SingleFixedSet(BigFloatArrayList values, FixedBitSet set, long numOrd) {
super();
this.values = values;
this.set = set;
this.numOrd = numOrd;
@ -269,8 +261,8 @@ public abstract class FloatArrayAtomicFieldData extends AbstractAtomicNumericFie
* Note, here, we assume that there is no offset by 1 from docId, so position 0
* is the value for docId 0.
*/
public Single(BigFloatArrayList values, int numDocs, long numOrd) {
super(numDocs);
public Single(BigFloatArrayList values, long numOrd) {
super();
this.values = values;
this.numOrd = numOrd;
}

View File

@ -79,7 +79,7 @@ public class FloatArrayIndexFieldData extends AbstractIndexFieldData<FloatArrayA
// TODO: Use an actual estimator to estimate before loading.
NonEstimatingEstimator estimator = new NonEstimatingEstimator(breakerService.getBreaker());
if (terms == null) {
data = FloatArrayAtomicFieldData.empty(reader.maxDoc());
data = FloatArrayAtomicFieldData.empty();
estimator.afterLoad(null, data.getMemorySizeInBytes());
return data;
}
@ -98,7 +98,7 @@ public class FloatArrayIndexFieldData extends AbstractIndexFieldData<FloatArrayA
}
Ordinals build = builder.build(fieldDataType.getSettings());
if (build.isMultiValued() || CommonSettings.getMemoryStorageHint(fieldDataType) == CommonSettings.MemoryStorageFormat.ORDINALS) {
data = new FloatArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new FloatArrayAtomicFieldData.WithOrdinals(values, build);
} else {
Docs ordinals = build.ordinals();
final FixedBitSet set = builder.buildDocsWithValuesSet();
@ -108,7 +108,7 @@ public class FloatArrayIndexFieldData extends AbstractIndexFieldData<FloatArrayA
long uniqueValuesArraySize = values.sizeInBytes();
long ordinalsSize = build.getMemorySizeInBytes();
if (uniqueValuesArraySize + ordinalsSize < singleValuesArraySize) {
data = new FloatArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new FloatArrayAtomicFieldData.WithOrdinals(values, build);
success = true;
return data;
}
@ -120,9 +120,9 @@ public class FloatArrayIndexFieldData extends AbstractIndexFieldData<FloatArrayA
}
assert sValues.size() == maxDoc;
if (set == null) {
data = new FloatArrayAtomicFieldData.Single(sValues, maxDoc, ordinals.getNumOrds());
data = new FloatArrayAtomicFieldData.Single(sValues, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new FloatArrayAtomicFieldData.SingleFixedSet(sValues, maxDoc, set, ordinals.getNumOrds());
data = new FloatArrayAtomicFieldData.SingleFixedSet(sValues, set, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
}
success = true;

View File

@ -19,7 +19,6 @@
package org.elasticsearch.index.fielddata.plain;
import org.apache.lucene.index.AtomicReader;
import org.apache.lucene.index.BinaryDocValues;
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.geo.GeoPoint;
@ -30,12 +29,10 @@ import org.elasticsearch.index.fielddata.ScriptDocValues;
final class GeoPointBinaryDVAtomicFieldData extends AtomicGeoPointFieldData<ScriptDocValues> {
private final AtomicReader reader;
private final BinaryDocValues values;
GeoPointBinaryDVAtomicFieldData(AtomicReader reader, BinaryDocValues values) {
GeoPointBinaryDVAtomicFieldData(BinaryDocValues values) {
super();
this.reader = reader;
this.values = values == null ? BinaryDocValues.EMPTY : values;
}
@ -44,11 +41,6 @@ final class GeoPointBinaryDVAtomicFieldData extends AtomicGeoPointFieldData<Scri
return false;
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumberUniqueValues() {
return Long.MAX_VALUE;

View File

@ -54,7 +54,7 @@ public class GeoPointBinaryDVIndexFieldData extends DocValuesIndexFieldData impl
@Override
public AtomicGeoPointFieldData<ScriptDocValues> load(AtomicReaderContext context) {
try {
return new GeoPointBinaryDVAtomicFieldData(context.reader(), context.reader().getBinaryDocValues(fieldNames.indexName()));
return new GeoPointBinaryDVAtomicFieldData(context.reader().getBinaryDocValues(fieldNames.indexName()));
} catch (IOException e) {
throw new ElasticsearchIllegalStateException("Cannot load doc values", e);
}

View File

@ -33,23 +33,12 @@ import org.elasticsearch.index.mapper.geo.GeoPointFieldMapper;
*/
public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFieldData<ScriptDocValues> {
private final int numDocs;
protected long size = -1;
public GeoPointCompressedAtomicFieldData(int numDocs) {
this.numDocs = numDocs;
}
@Override
public void close() {
}
@Override
public int getNumDocs() {
return numDocs;
}
@Override
public ScriptDocValues getScriptValues() {
return new ScriptDocValues.GeoPoints(getGeoPointValues());
@ -61,8 +50,8 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
private final PagedMutable lon, lat;
private final Ordinals ordinals;
public WithOrdinals(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, int numDocs, Ordinals ordinals) {
super(numDocs);
public WithOrdinals(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, Ordinals ordinals) {
super();
this.encoding = encoding;
this.lon = lon;
this.lat = lat;
@ -76,13 +65,13 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + lon.ramBytesUsed() + lat.ramBytesUsed();
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + lon.ramBytesUsed() + lat.ramBytesUsed();
}
return size;
}
@ -133,8 +122,8 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
private final FixedBitSet set;
private final long numOrds;
public SingleFixedSet(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, int numDocs, FixedBitSet set, long numOrds) {
super(numDocs);
public SingleFixedSet(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, FixedBitSet set, long numOrds) {
super();
this.encoding = encoding;
this.lon = lon;
this.lat = lat;
@ -155,7 +144,7 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + lon.ramBytesUsed() + lat.ramBytesUsed() + RamUsageEstimator.sizeOf(set.getBits());
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + lon.ramBytesUsed() + lat.ramBytesUsed() + RamUsageEstimator.sizeOf(set.getBits());
}
return size;
}
@ -204,8 +193,8 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
private final PagedMutable lon, lat;
private final long numOrds;
public Single(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, int numDocs, long numOrds) {
super(numDocs);
public Single(GeoPointFieldMapper.Encoding encoding, PagedMutable lon, PagedMutable lat, long numOrds) {
super();
this.encoding = encoding;
this.lon = lon;
this.lat = lat;
@ -225,7 +214,7 @@ public abstract class GeoPointCompressedAtomicFieldData extends AtomicGeoPointFi
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + (lon.ramBytesUsed() + lat.ramBytesUsed());
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + (lon.ramBytesUsed() + lat.ramBytesUsed());
}
return size;
}

View File

@ -85,7 +85,7 @@ public class GeoPointCompressedIndexFieldData extends AbstractGeoPointIndexField
// TODO: Use an actual estimator to estimate before loading.
NonEstimatingEstimator estimator = new NonEstimatingEstimator(breakerService.getBreaker());
if (terms == null) {
data = new Empty(reader.maxDoc());
data = new Empty();
estimator.afterLoad(null, data.getMemorySizeInBytes());
return data;
}
@ -121,7 +121,7 @@ public class GeoPointCompressedIndexFieldData extends AbstractGeoPointIndexField
lat = lat.resize(build.getMaxOrd());
lon = lon.resize(build.getMaxOrd());
}
data = new GeoPointCompressedAtomicFieldData.WithOrdinals(encoding, lon, lat, reader.maxDoc(), build);
data = new GeoPointCompressedAtomicFieldData.WithOrdinals(encoding, lon, lat, build);
} else {
Docs ordinals = build.ordinals();
int maxDoc = reader.maxDoc();
@ -134,9 +134,9 @@ public class GeoPointCompressedIndexFieldData extends AbstractGeoPointIndexField
}
FixedBitSet set = builder.buildDocsWithValuesSet();
if (set == null) {
data = new GeoPointCompressedAtomicFieldData.Single(encoding, sLon, sLat, reader.maxDoc(), ordinals.getNumOrds());
data = new GeoPointCompressedAtomicFieldData.Single(encoding, sLon, sLat, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new GeoPointCompressedAtomicFieldData.SingleFixedSet(encoding, sLon, sLat, reader.maxDoc(), set, ordinals.getNumOrds());
data = new GeoPointCompressedAtomicFieldData.SingleFixedSet(encoding, sLon, sLat, set, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
}
success = true;

View File

@ -31,23 +31,12 @@ import org.elasticsearch.index.fielddata.ordinals.Ordinals;
*/
public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointFieldData<ScriptDocValues> {
private final int numDocs;
protected long size = -1;
public GeoPointDoubleArrayAtomicFieldData(int numDocs) {
this.numDocs = numDocs;
}
@Override
public void close() {
}
@Override
public int getNumDocs() {
return numDocs;
}
@Override
public ScriptDocValues getScriptValues() {
return new ScriptDocValues.GeoPoints(getGeoPointValues());
@ -58,8 +47,8 @@ public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointF
private final BigDoubleArrayList lon, lat;
private final Ordinals ordinals;
public WithOrdinals(BigDoubleArrayList lon, BigDoubleArrayList lat, int numDocs, Ordinals ordinals) {
super(numDocs);
public WithOrdinals(BigDoubleArrayList lon, BigDoubleArrayList lat, Ordinals ordinals) {
super();
this.lon = lon;
this.lat = lat;
this.ordinals = ordinals;
@ -72,13 +61,13 @@ public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointF
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + lon.sizeInBytes() + lat.sizeInBytes();
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + lon.sizeInBytes() + lat.sizeInBytes();
}
return size;
}
@ -126,8 +115,8 @@ public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointF
private final FixedBitSet set;
private final long numOrds;
public SingleFixedSet(BigDoubleArrayList lon, BigDoubleArrayList lat, int numDocs, FixedBitSet set, long numOrds) {
super(numDocs);
public SingleFixedSet(BigDoubleArrayList lon, BigDoubleArrayList lat, FixedBitSet set, long numOrds) {
super();
this.lon = lon;
this.lat = lat;
this.set = set;
@ -147,7 +136,7 @@ public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointF
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + lon.sizeInBytes() + lat.sizeInBytes() + RamUsageEstimator.sizeOf(set.getBits());
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + lon.sizeInBytes() + lat.sizeInBytes() + RamUsageEstimator.sizeOf(set.getBits());
}
return size;
}
@ -194,8 +183,8 @@ public abstract class GeoPointDoubleArrayAtomicFieldData extends AtomicGeoPointF
private final BigDoubleArrayList lon, lat;
private final long numOrds;
public Single(BigDoubleArrayList lon, BigDoubleArrayList lat, int numDocs, long numOrds) {
super(numDocs);
public Single(BigDoubleArrayList lon, BigDoubleArrayList lat, long numOrds) {
super();
this.lon = lon;
this.lat = lat;
this.numOrds = numOrds;

View File

@ -66,7 +66,7 @@ public class GeoPointDoubleArrayIndexFieldData extends AbstractGeoPointIndexFiel
// TODO: Use an actual estimator to estimate before loading.
NonEstimatingEstimator estimator = new NonEstimatingEstimator(breakerService.getBreaker());
if (terms == null) {
data = new Empty(reader.maxDoc());
data = new Empty();
estimator.afterLoad(null, data.getMemorySizeInBytes());
return data;
}
@ -97,12 +97,12 @@ public class GeoPointDoubleArrayIndexFieldData extends AbstractGeoPointIndexFiel
}
FixedBitSet set = builder.buildDocsWithValuesSet();
if (set == null) {
data = new GeoPointDoubleArrayAtomicFieldData.Single(sLon, sLat, reader.maxDoc(), ordinals.getNumOrds());
data = new GeoPointDoubleArrayAtomicFieldData.Single(sLon, sLat, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new GeoPointDoubleArrayAtomicFieldData.SingleFixedSet(sLon, sLat, reader.maxDoc(), set, ordinals.getNumOrds());
data = new GeoPointDoubleArrayAtomicFieldData.SingleFixedSet(sLon, sLat, set, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
} else {
data = new GeoPointDoubleArrayAtomicFieldData.WithOrdinals(lon, lat, reader.maxDoc(), build);
data = new GeoPointDoubleArrayAtomicFieldData.WithOrdinals(lon, lat, build);
}
success = true;
return data;

View File

@ -52,11 +52,6 @@ public class NumericDVAtomicFieldData extends AbstractAtomicNumericFieldData {
return false;
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumberUniqueValues() {
// good upper limit

View File

@ -32,34 +32,22 @@ import org.elasticsearch.index.fielddata.ordinals.Ordinals;
*/
public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFieldData {
public static PackedArrayAtomicFieldData empty(int numDocs) {
return new Empty(numDocs);
public static PackedArrayAtomicFieldData empty() {
return new Empty();
}
private final int numDocs;
protected long size = -1;
public PackedArrayAtomicFieldData(int numDocs) {
public PackedArrayAtomicFieldData() {
super(false);
this.numDocs = numDocs;
}
@Override
public void close() {
}
@Override
public int getNumDocs() {
return numDocs;
}
static class Empty extends PackedArrayAtomicFieldData {
Empty(int numDocs) {
super(numDocs);
}
@Override
public LongValues getLongValues() {
return LongValues.EMPTY;
@ -101,8 +89,8 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
private final MonotonicAppendingLongBuffer values;
private final Ordinals ordinals;
public WithOrdinals(MonotonicAppendingLongBuffer values, int numDocs, Ordinals ordinals) {
super(numDocs);
public WithOrdinals(MonotonicAppendingLongBuffer values, Ordinals ordinals) {
super();
this.values = values;
this.ordinals = ordinals;
}
@ -115,14 +103,14 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
@Override
public long getMemorySizeInBytes() {
if (size == -1) {
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + RamUsageEstimator.NUM_BYTES_INT/*numDocs*/ + values.ramBytesUsed() + ordinals.getMemorySizeInBytes();
size = RamUsageEstimator.NUM_BYTES_INT/*size*/ + values.ramBytesUsed() + ordinals.getMemorySizeInBytes();
}
return size;
}
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
@ -181,8 +169,8 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
private final long missingValue;
private final long numOrds;
public SingleSparse(PackedInts.Mutable values, long minValue, int numDocs, long missingValue, long numOrds) {
super(numDocs);
public SingleSparse(PackedInts.Mutable values, long minValue, long missingValue, long numOrds) {
super();
this.values = values;
this.minValue = minValue;
this.missingValue = missingValue;
@ -281,8 +269,8 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
* Note, here, we assume that there is no offset by 1 from docId, so position 0
* is the value for docId 0.
*/
public Single(PackedInts.Mutable values, long minValue, int numDocs, long numOrds) {
super(numDocs);
public Single(PackedInts.Mutable values, long minValue, long numOrds) {
super();
this.values = values;
this.minValue = minValue;
this.numOrds = numOrds;
@ -373,8 +361,8 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
* Note, here, we assume that there is no offset by 1 from docId, so position 0
* is the value for docId 0.
*/
public PagedSingle(AppendingDeltaPackedLongBuffer values, int numDocs, long numOrds) {
super(numDocs);
public PagedSingle(AppendingDeltaPackedLongBuffer values, long numOrds) {
super();
this.values = values;
this.numOrds = numOrds;
}
@ -460,8 +448,8 @@ public abstract class PackedArrayAtomicFieldData extends AbstractAtomicNumericFi
private final FixedBitSet docsWithValue;
private final long numOrds;
public PagedSingleSparse(AppendingDeltaPackedLongBuffer values, int numDocs, FixedBitSet docsWithValue, long numOrds) {
super(numDocs);
public PagedSingleSparse(AppendingDeltaPackedLongBuffer values, FixedBitSet docsWithValue, long numOrds) {
super();
this.values = values;
this.docsWithValue = docsWithValue;
this.numOrds = numOrds;

View File

@ -101,7 +101,7 @@ public class PackedArrayIndexFieldData extends AbstractIndexFieldData<AtomicNume
PackedArrayAtomicFieldData data = null;
PackedArrayEstimator estimator = new PackedArrayEstimator(breakerService.getBreaker(), getNumericType(), getFieldNames().fullName());
if (terms == null) {
data = PackedArrayAtomicFieldData.empty(reader.maxDoc());
data = PackedArrayAtomicFieldData.empty();
estimator.adjustForNoTerms(data.getMemorySizeInBytes());
return data;
}
@ -129,7 +129,7 @@ public class PackedArrayIndexFieldData extends AbstractIndexFieldData<AtomicNume
CommonSettings.MemoryStorageFormat formatHint = CommonSettings.getMemoryStorageHint(fieldDataType);
if (build.isMultiValued() || formatHint == CommonSettings.MemoryStorageFormat.ORDINALS) {
data = new PackedArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new PackedArrayAtomicFieldData.WithOrdinals(values, build);
} else {
Docs ordinals = build.ordinals();
final FixedBitSet docsWithValues = builder.buildDocsWithValuesSet();
@ -191,9 +191,9 @@ public class PackedArrayIndexFieldData extends AbstractIndexFieldData<AtomicNume
}
}
if (docsWithValues == null) {
data = new PackedArrayAtomicFieldData.Single(sValues, minValue, reader.maxDoc(), ordinals.getNumOrds());
data = new PackedArrayAtomicFieldData.Single(sValues, minValue, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new PackedArrayAtomicFieldData.SingleSparse(sValues, minValue, reader.maxDoc(), missingValue, ordinals.getNumOrds());
data = new PackedArrayAtomicFieldData.SingleSparse(sValues, minValue, missingValue, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
break;
case PAGED:
@ -210,13 +210,13 @@ public class PackedArrayIndexFieldData extends AbstractIndexFieldData<AtomicNume
}
dpValues.freeze();
if (docsWithValues == null) {
data = new PackedArrayAtomicFieldData.PagedSingle(dpValues, reader.maxDoc(), ordinals.getNumOrds());
data = new PackedArrayAtomicFieldData.PagedSingle(dpValues, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
} else {
data = new PackedArrayAtomicFieldData.PagedSingleSparse(dpValues, reader.maxDoc(), docsWithValues, ordinals.getNumOrds());
data = new PackedArrayAtomicFieldData.PagedSingleSparse(dpValues, docsWithValues, ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL);
}
break;
case ORDINALS:
data = new PackedArrayAtomicFieldData.WithOrdinals(values, reader.maxDoc(), build);
data = new PackedArrayAtomicFieldData.WithOrdinals(values, build);
break;
default:
throw new ElasticsearchException("unknown memory format: " + formatHint);

View File

@ -35,8 +35,8 @@ import org.elasticsearch.index.fielddata.ordinals.Ordinals.Docs;
*/
public class PagedBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> {
public static PagedBytesAtomicFieldData empty(int numDocs) {
return new Empty(numDocs);
public static PagedBytesAtomicFieldData empty() {
return new Empty();
}
// 0 ordinal in values means no value (its null)
@ -64,14 +64,9 @@ public class PagedBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<S
return ordinals.isMultiValued();
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public long getNumberUniqueValues() {
return ordinals.getNumOrds();
return ordinals.getMaxOrd() - Ordinals.MIN_ORDINAL;
}
@Override
@ -179,8 +174,8 @@ public class PagedBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<S
private final static class Empty extends PagedBytesAtomicFieldData {
Empty(int numDocs) {
super(emptyBytes(), 0, new MonotonicAppendingLongBuffer(), new EmptyOrdinals(numDocs));
Empty() {
super(emptyBytes(), 0, new MonotonicAppendingLongBuffer(), EmptyOrdinals.INSTANCE);
}
static PagedBytes.Reader emptyBytes() {
@ -194,11 +189,6 @@ public class PagedBytesAtomicFieldData implements AtomicFieldData.WithOrdinals<S
return false;
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public long getNumberUniqueValues() {
return 0;

View File

@ -26,8 +26,10 @@ import org.apache.lucene.util.packed.MonotonicAppendingLongBuffer;
import org.elasticsearch.common.breaker.MemoryCircuitBreaker;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.Index;
import org.elasticsearch.index.fielddata.FieldDataType;
import org.elasticsearch.index.fielddata.IndexFieldData;
import org.elasticsearch.index.fielddata.IndexFieldDataCache;
import org.elasticsearch.index.fielddata.RamAccountingTermsEnum;
import org.elasticsearch.index.fielddata.*;
import org.elasticsearch.index.fielddata.ordinals.GlobalOrdinalsBuilder;
import org.elasticsearch.index.fielddata.ordinals.Ordinals;
import org.elasticsearch.index.fielddata.ordinals.OrdinalsBuilder;
@ -66,7 +68,7 @@ public class PagedBytesIndexFieldData extends AbstractBytesIndexFieldData<PagedB
PagedBytesEstimator estimator = new PagedBytesEstimator(context, breakerService.getBreaker(), getFieldNames().fullName());
Terms terms = reader.terms(getFieldNames().indexName());
if (terms == null) {
PagedBytesAtomicFieldData emptyData = PagedBytesAtomicFieldData.empty(reader.maxDoc());
PagedBytesAtomicFieldData emptyData = PagedBytesAtomicFieldData.empty();
estimator.adjustForNoTerms(emptyData.getMemorySizeInBytes());
return emptyData;
}

View File

@ -33,7 +33,6 @@ public class ParentChildAtomicFieldData implements AtomicFieldData {
private final ImmutableOpenMap<String, PagedBytesAtomicFieldData> typeToIds;
private final long numberUniqueValues;
private final long memorySizeInBytes;
private final int numDocs;
public ParentChildAtomicFieldData(ImmutableOpenMap<String, PagedBytesAtomicFieldData> typeToIds) {
this.typeToIds = typeToIds;
@ -47,7 +46,6 @@ public class ParentChildAtomicFieldData implements AtomicFieldData {
size += cursor.value.getMemorySizeInBytes();
}
this.memorySizeInBytes = size;
this.numDocs = typeToIds.isEmpty() ? 0 : typeToIds.values().toArray(PagedBytesAtomicFieldData.class)[0].getNumDocs();
}
@Override
@ -55,11 +53,6 @@ public class ParentChildAtomicFieldData implements AtomicFieldData {
return true;
}
@Override
public int getNumDocs() {
return numDocs;
}
@Override
public long getNumberUniqueValues() {
return numberUniqueValues;

View File

@ -25,7 +25,6 @@ import org.apache.lucene.index.SortedSetDocValues;
import org.apache.lucene.index.TermsEnum;
import org.apache.lucene.util.ArrayUtil;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LongsRef;
import org.elasticsearch.ElasticsearchIllegalStateException;
import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.common.util.IntArray;
@ -196,16 +195,6 @@ abstract class SortedSetDVAtomicFieldData {
return true;
}
@Override
public int getNumDocs() {
return reader.maxDoc();
}
@Override
public long getNumOrds() {
return numOrds;
}
@Override
public long getMaxOrd() {
return 1 + numOrds;
@ -220,43 +209,17 @@ abstract class SortedSetDVAtomicFieldData {
}
static class SortedSetDocs implements Ordinals.Docs {
static class SortedSetDocs extends Ordinals.AbstractDocs {
private final SortedSetOrdinals ordinals;
private final SortedSetDocValues values;
private final LongsRef longScratch;
private long[] ords;
private int ordIndex = Integer.MAX_VALUE;
private long currentOrdinal = -1;
SortedSetDocs(SortedSetOrdinals ordinals, SortedSetDocValues values) {
this.ordinals = ordinals;
super(ordinals);
this.values = values;
longScratch = new LongsRef(8);
}
@Override
public Ordinals ordinals() {
return ordinals;
}
@Override
public int getNumDocs() {
return ordinals.getNumDocs();
}
@Override
public long getNumOrds() {
return ordinals.getNumOrds();
}
@Override
public long getMaxOrd() {
return ordinals.getMaxOrd();
}
@Override
public boolean isMultiValued() {
return ordinals.isMultiValued();
ords = new long[0];
}
@Override
@ -265,31 +228,24 @@ abstract class SortedSetDVAtomicFieldData {
return currentOrdinal = 1 + values.nextOrd();
}
@Override
public LongsRef getOrds(int docId) {
values.setDocument(docId);
longScratch.offset = 0;
longScratch.length = 0;
for (long ord = values.nextOrd(); ord != SortedSetDocValues.NO_MORE_ORDS; ord = values.nextOrd()) {
longScratch.longs = ArrayUtil.grow(longScratch.longs, longScratch.length + 1);
longScratch.longs[longScratch.length++] = 1 + ord;
}
return longScratch;
}
@Override
public long nextOrd() {
assert ordIndex < longScratch.length;
return currentOrdinal = longScratch.longs[ordIndex++];
assert ordIndex < ords.length;
return currentOrdinal = ords[ordIndex++];
}
@Override
public int setDocument(int docId) {
// For now, we consume all ords and pass them to the iter instead of doing it in a streaming way because Lucene's
// SORTED_SET doc values are cached per thread, you can't have a fully independent instance
final LongsRef ords = getOrds(docId);
values.setDocument(docId);
int i = 0;
for (long ord = values.nextOrd(); ord != SortedSetDocValues.NO_MORE_ORDS; ord = values.nextOrd()) {
ords = ArrayUtil.grow(ords, i + 1);
ords[i++] = ord + Ordinals.MIN_ORDINAL;
}
ordIndex = 0;
return ords.length;
return i;
}
@Override

View File

@ -207,7 +207,7 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
if (current != null) {
missing += current.counts.get(0);
total += current.total - current.counts.get(0);
if (current.values.ordinals().getNumOrds() > 0) {
if (current.values.ordinals().getMaxOrd() > Ordinals.MIN_ORDINAL) {
aggregators.add(current);
} else {
Releasables.close(current);
@ -235,7 +235,7 @@ public class TermsStringOrdinalsFacetExecutor extends FacetExecutor {
missing += current.counts.get(0);
total += current.total - current.counts.get(0);
// if we have values for this one, add it
if (current.values.ordinals().getNumOrds() > 0) {
if (current.values.ordinals().getMaxOrd() > Ordinals.MIN_ORDINAL) {
aggregators.add(current);
} else {
Releasables.close(current);

View File

@ -67,7 +67,7 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
AtomicReaderContext readerContext = refreshReader();
AtomicFieldData fieldData = indexFieldData.load(readerContext);
BytesValues values = fieldData.getBytesValues(randomBoolean());
for (int i = 0; i < fieldData.getNumDocs(); ++i) {
for (int i = 0; i < readerContext.reader().maxDoc(); ++i) {
assertThat(values.setDocument(i), greaterThanOrEqualTo(1));
}
}
@ -80,8 +80,6 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
AtomicFieldData fieldData = indexFieldData.load(readerContext);
assertThat(fieldData.getMemorySizeInBytes(), greaterThan(0l));
assertThat(fieldData.getNumDocs(), equalTo(3));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());
assertThat(bytesValues.isMultiValued(), equalTo(false));
@ -177,8 +175,6 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
AtomicFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getMemorySizeInBytes(), greaterThan(0l));
assertThat(fieldData.getNumDocs(), equalTo(3));
BytesValues bytesValues = fieldData
.getBytesValues(randomBoolean());
@ -209,8 +205,6 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
AtomicFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getMemorySizeInBytes(), greaterThan(0l));
assertThat(fieldData.getNumDocs(), equalTo(3));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());
assertThat(bytesValues.isMultiValued(), equalTo(true));
@ -253,8 +247,6 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
AtomicFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getMemorySizeInBytes(), greaterThan(0l));
assertThat(fieldData.getNumDocs(), equalTo(3));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());
assertThat(bytesValues.isMultiValued(), equalTo(true));
@ -286,8 +278,6 @@ public abstract class AbstractFieldDataImplTests extends AbstractFieldDataTests
// Some impls (FST) return size 0 and some (PagedBytes) do take size in the case no actual data is loaded
assertThat(fieldData.getMemorySizeInBytes(), greaterThanOrEqualTo(0l));
assertThat(fieldData.getNumDocs(), equalTo(3));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());
assertThat(bytesValues.isMultiValued(), equalTo(false));

View File

@ -54,8 +54,6 @@ public abstract class AbstractNumericFieldDataTests extends AbstractFieldDataImp
IndexNumericFieldData indexFieldData = getForField("value");
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(3));
LongValues longValues = fieldData.getLongValues();
assertThat(longValues.isMultiValued(), equalTo(false));
@ -106,8 +104,6 @@ public abstract class AbstractNumericFieldDataTests extends AbstractFieldDataImp
IndexNumericFieldData indexFieldData = getForField("value");
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(3));
LongValues longValues = fieldData.getLongValues();
assertThat(longValues.isMultiValued(), equalTo(false));
@ -184,8 +180,6 @@ public abstract class AbstractNumericFieldDataTests extends AbstractFieldDataImp
IndexNumericFieldData indexFieldData = getForField("value");
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(3));
LongValues longValues = fieldData.getLongValues();
assertThat(longValues.isMultiValued(), equalTo(true));
@ -221,8 +215,6 @@ public abstract class AbstractNumericFieldDataTests extends AbstractFieldDataImp
IndexNumericFieldData indexFieldData = getForField("value");
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(3));
LongValues longValues = fieldData.getLongValues();
assertThat(longValues.isMultiValued(), equalTo(true));
@ -258,8 +250,6 @@ public abstract class AbstractNumericFieldDataTests extends AbstractFieldDataImp
IndexNumericFieldData indexFieldData = getForField("value");
AtomicNumericFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(3));
// long values
LongValues longValues = fieldData.getLongValues();

View File

@ -435,9 +435,8 @@ public abstract class AbstractStringFieldDataTests extends AbstractFieldDataImpl
// First segment
assertThat(globalOrdinals, instanceOf(GlobalOrdinalsIndexFieldData.class));
AtomicFieldData.WithOrdinals afd = globalOrdinals.load(topLevelReader.leaves().get(0));
assertThat(afd.getNumDocs(), equalTo(3));
BytesValues.WithOrdinals values = afd.getBytesValues(randomBoolean());
Ordinals.Docs ordinals = values.ordinals().ordinals().ordinals();
Ordinals.Docs ordinals = afd.getBytesValues(randomBoolean()).ordinals();
assertThat(ordinals.setDocument(0), equalTo(2));
long ord = ordinals.nextOrd();
assertThat(ord, equalTo(4l));
@ -453,9 +452,8 @@ public abstract class AbstractStringFieldDataTests extends AbstractFieldDataImpl
// Second segment
afd = globalOrdinals.load(topLevelReader.leaves().get(1));
assertThat(afd.getNumDocs(), equalTo(4));
values = afd.getBytesValues(randomBoolean());
ordinals = values.ordinals().ordinals().ordinals();
ordinals = afd.getBytesValues(randomBoolean()).ordinals();
assertThat(ordinals.setDocument(0), equalTo(3));
ord = ordinals.nextOrd();
assertThat(ord, equalTo(6l));
@ -491,8 +489,7 @@ public abstract class AbstractStringFieldDataTests extends AbstractFieldDataImpl
// Third segment
afd = globalOrdinals.load(topLevelReader.leaves().get(2));
values = afd.getBytesValues(randomBoolean());
ordinals = values.ordinals().ordinals().ordinals();
assertThat(afd.getNumDocs(), equalTo(1));
ordinals = afd.getBytesValues(randomBoolean()).ordinals();
assertThat(ordinals.setDocument(0), equalTo(3));
ord = ordinals.nextOrd();
assertThat(ord, equalTo(1l));

View File

@ -79,7 +79,6 @@ public class BinaryDVFieldDataTests extends AbstractFieldDataTests {
AtomicReaderContext reader = refreshReader();
IndexFieldData indexFieldData = getForField("field");
AtomicFieldData fieldData = indexFieldData.load(reader);
assertThat(fieldData.getNumDocs(), equalTo(4));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());

View File

@ -407,7 +407,6 @@ public class DuelFieldDataTests extends AbstractFieldDataTests {
Docs leftOrds = left.ordinals();
Docs rightOrds = right.ordinals();
assertEquals(leftOrds.getMaxOrd(), rightOrds.getMaxOrd());
assertEquals(leftOrds.getNumOrds(), rightOrds.getNumOrds());
for (long ord = Ordinals.MIN_ORDINAL; ord < leftOrds.getMaxOrd(); ++ord) {
assertEquals(left.getValueByOrd(ord), right.getValueByOrd(ord));
}
@ -503,9 +502,8 @@ public class DuelFieldDataTests extends AbstractFieldDataTests {
private static void duelFieldDataBytes(Random random, AtomicReaderContext context, IndexFieldData<?> left, IndexFieldData<?> right, Preprocessor pre) throws Exception {
AtomicFieldData<?> leftData = random.nextBoolean() ? left.load(context) : left.loadDirect(context);
AtomicFieldData<?> rightData = random.nextBoolean() ? right.load(context) : right.loadDirect(context);
assertThat(leftData.getNumDocs(), equalTo(rightData.getNumDocs()));
int numDocs = leftData.getNumDocs();
int numDocs = context.reader().maxDoc();
BytesValues leftBytesValues = leftData.getBytesValues(random.nextBoolean());
BytesValues rightBytesValues = rightData.getBytesValues(random.nextBoolean());
BytesRef leftSpare = new BytesRef();
@ -540,9 +538,7 @@ public class DuelFieldDataTests extends AbstractFieldDataTests {
AtomicNumericFieldData leftData = random.nextBoolean() ? left.load(context) : left.loadDirect(context);
AtomicNumericFieldData rightData = random.nextBoolean() ? right.load(context) : right.loadDirect(context);
assertThat(leftData.getNumDocs(), equalTo(rightData.getNumDocs()));
int numDocs = leftData.getNumDocs();
int numDocs = context.reader().maxDoc();
DoubleValues leftDoubleValues = leftData.getDoubleValues();
DoubleValues rightDoubleValues = rightData.getDoubleValues();
for (int i = 0; i < numDocs; i++) {
@ -568,9 +564,7 @@ public class DuelFieldDataTests extends AbstractFieldDataTests {
AtomicNumericFieldData leftData = random.nextBoolean() ? left.load(context) : left.loadDirect(context);
AtomicNumericFieldData rightData = random.nextBoolean() ? right.load(context) : right.loadDirect(context);
assertThat(leftData.getNumDocs(), equalTo(rightData.getNumDocs()));
int numDocs = leftData.getNumDocs();
int numDocs = context.reader().maxDoc();
LongValues leftLongValues = leftData.getLongValues();
LongValues rightLongValues = rightData.getLongValues();
for (int i = 0; i < numDocs; i++) {
@ -592,9 +586,7 @@ public class DuelFieldDataTests extends AbstractFieldDataTests {
AtomicGeoPointFieldData<?> leftData = random.nextBoolean() ? left.load(context) : left.loadDirect(context);
AtomicGeoPointFieldData<?> rightData = random.nextBoolean() ? right.load(context) : right.loadDirect(context);
assertThat(leftData.getNumDocs(), equalTo(rightData.getNumDocs()));
int numDocs = leftData.getNumDocs();
int numDocs = context.reader().maxDoc();
GeoPointValues leftValues = leftData.getGeoPointValues();
GeoPointValues rightValues = rightData.getGeoPointValues();
for (int i = 0; i < numDocs; ++i) {

View File

@ -74,8 +74,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(2L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(3L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("10"));
assertThat(bytesValues.getValueByOrd(2).utf8ToString(), equalTo("100"));
}
@ -87,8 +86,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(1L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(2L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("5"));
}
@ -100,8 +98,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(2L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(3L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("10"));
assertThat(bytesValues.getValueByOrd(2).utf8ToString(), equalTo("100"));
}
@ -114,8 +111,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(2L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(3L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("10"));
assertThat(bytesValues.getValueByOrd(2).utf8ToString(), equalTo("100"));
}
@ -131,8 +127,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(1L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(2L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("100"));
}
}
@ -176,8 +171,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(1L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(2L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("5"));
}
{
@ -188,8 +182,7 @@ public class FilterFieldDataTest extends AbstractFieldDataTests {
AtomicFieldData.WithOrdinals<ScriptDocValues.Strings> loadDirect = (WithOrdinals<Strings>) fieldData.loadDirect(context);
BytesValues.WithOrdinals bytesValues = loadDirect.getBytesValues(randomBoolean());
Docs ordinals = bytesValues.ordinals();
assertThat(2L, equalTo(ordinals.getNumOrds()));
assertThat(1000, equalTo(ordinals.getNumDocs()));
assertThat(3L, equalTo(ordinals.getMaxOrd()));
assertThat(bytesValues.getValueByOrd(1).utf8ToString(), equalTo("10"));
assertThat(bytesValues.getValueByOrd(2).utf8ToString(), equalTo("5"));
}

View File

@ -105,7 +105,6 @@ public class ParentChildFieldDataTests extends AbstractFieldDataTests {
public void testGetBytesValues() throws Exception {
IndexFieldData indexFieldData = getForField(childType);
AtomicFieldData fieldData = indexFieldData.load(refreshReader());
assertThat(fieldData.getNumDocs(), equalTo(8));
assertThat(fieldData.getMemorySizeInBytes(), greaterThan(0l));
BytesValues bytesValues = fieldData.getBytesValues(randomBoolean());

View File

@ -18,7 +18,6 @@
*/
package org.elasticsearch.index.fielddata.ordinals;
import org.apache.lucene.util.LongsRef;
import org.apache.lucene.util.packed.PackedInts;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.test.ElasticsearchTestCase;
@ -113,11 +112,11 @@ public class MultiOrdinalsTests extends ElasticsearchTestCase {
} else {
if (!docOrds.isEmpty()) {
assertThat(docs.getOrd(docId), equalTo(docOrds.get(0)));
LongsRef ref = docs.getOrds(docId);
assertThat(ref.offset, equalTo(0));
for (int i = ref.offset; i < ref.length; i++) {
assertThat("index: " + i + " offset: " + ref.offset + " len: " + ref.length, ref.longs[i], equalTo(docOrds.get(i)));
final int numOrds = docs.setDocument(docId);
assertThat(numOrds, equalTo(docOrds.size()));
for (int i = 0; i < numOrds; i++) {
assertThat(docs.nextOrd(), equalTo(docOrds.get(i)));
}
final long[] array = new long[docOrds.size()];
for (int i = 0; i < array.length; i++) {
@ -273,16 +272,15 @@ public class MultiOrdinalsTests extends ElasticsearchTestCase {
numOrds = Math.max(numOrds, ordinalPlan[doc][ordinalPlan[doc].length - 1]);
}
}
assertThat(docs.getNumDocs(), equalTo(ordinalPlan.length));
assertThat(docs.getNumOrds(), equalTo(numOrds)); // Includes null ord
assertThat(docs.getMaxOrd(), equalTo(numOrds + Ordinals.MIN_ORDINAL)); // Includes null ord
assertThat(docs.getMaxOrd(), equalTo(numOrds + 1));
assertThat(docs.isMultiValued(), equalTo(true));
for (int doc = 0; doc < ordinalPlan.length; ++doc) {
LongsRef ref = docs.getOrds(doc);
assertThat(ref.offset, equalTo(0));
long[] ords = ordinalPlan[doc];
assertThat(ref, equalTo(new LongsRef(ords, 0, ords.length)));
assertIter(docs, doc, ords);
assertThat(docs.setDocument(doc), equalTo(ords.length));
for (int i = 0; i < ords.length; ++i) {
assertThat(docs.nextOrd(), equalTo(ords[i]));
}
}
}

View File

@ -52,7 +52,6 @@ public class SingleOrdinalsTests extends ElasticsearchTestCase {
assertThat(ords, instanceOf(SinglePackedOrdinals.class));
Ordinals.Docs docs = ords.ordinals();
assertThat(controlDocToOrdinal.size(), equalTo(docs.getNumDocs()));
for (Map.Entry<Integer, Long> entry : controlDocToOrdinal.entrySet()) {
assertThat(entry.getValue(), equalTo(docs.getOrd(entry.getKey())));
}