mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-06 04:58:50 +00:00
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:
parent
54612ee2b5
commit
b3e0e58094
@ -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.
|
||||
*/
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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"));
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -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]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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())));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user