Skip to content

Commit 54d4957

Browse files
romseygeekKubik42
authored andcommitted
FieldData to use LongValues in place of NumericDocValues (elastic#136469)
We don't use doc-by-doc iteration in FieldData, so this simplifies several implementations and also doesn't make unimplemented APIs available. Adds a new SortedNumericLongValues class, analogous to SortedNumericDoubleValues, which offers a multi-valued version of LongValues.
1 parent d6a36b9 commit 54d4957

File tree

103 files changed

+667
-766
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+667
-766
lines changed

benchmarks/src/main/java/org/elasticsearch/benchmark/script/ScriptScoreBenchmark.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import org.apache.lucene.index.IndexWriter;
1616
import org.apache.lucene.index.IndexWriterConfig;
1717
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
18-
import org.apache.lucene.index.SortedNumericDocValues;
1918
import org.apache.lucene.search.IndexSearcher;
2019
import org.apache.lucene.search.MatchAllDocsQuery;
2120
import org.apache.lucene.search.Query;
@@ -29,6 +28,7 @@
2928
import org.elasticsearch.index.fielddata.FieldDataContext;
3029
import org.elasticsearch.index.fielddata.IndexFieldDataCache;
3130
import org.elasticsearch.index.fielddata.IndexNumericFieldData;
31+
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
3232
import org.elasticsearch.index.mapper.IndexType;
3333
import org.elasticsearch.index.mapper.MappedFieldType;
3434
import org.elasticsearch.index.mapper.MappingLookup;
@@ -179,14 +179,14 @@ private ScoreScript.Factory bareMetalScript() {
179179
return new ScoreScript.LeafFactory() {
180180
@Override
181181
public ScoreScript newInstance(DocReader docReader) throws IOException {
182-
SortedNumericDocValues values = ifd.load(((DocValuesDocReader) docReader).getLeafReaderContext()).getLongValues();
182+
SortedNumericLongValues values = ifd.load(((DocValuesDocReader) docReader).getLeafReaderContext()).getLongValues();
183183
return new ScoreScript(params, null, docReader) {
184184
private int docId;
185185

186186
@Override
187187
public double execute(ExplanationHolder explanation) {
188188
try {
189-
values.advance(docId);
189+
values.advanceExact(docId);
190190
if (values.docValueCount() != 1) {
191191
throw new IllegalArgumentException("script only works when there is exactly one value");
192192
}

modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/histogram/AutoDateHistogramAggregator.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
*/
99
package org.elasticsearch.aggregations.bucket.histogram;
1010

11-
import org.apache.lucene.index.DocValues;
12-
import org.apache.lucene.index.NumericDocValues;
13-
import org.apache.lucene.index.SortedNumericDocValues;
11+
import org.apache.lucene.search.LongValues;
1412
import org.apache.lucene.search.ScoreMode;
1513
import org.apache.lucene.util.CollectionUtil;
1614
import org.elasticsearch.aggregations.bucket.histogram.AutoDateHistogramAggregationBuilder.RoundingInfo;
@@ -19,6 +17,7 @@
1917
import org.elasticsearch.common.util.IntArray;
2018
import org.elasticsearch.common.util.LongArray;
2119
import org.elasticsearch.core.Releasables;
20+
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
2221
import org.elasticsearch.search.DocValueFormat;
2322
import org.elasticsearch.search.aggregations.AggregationExecutionContext;
2423
import org.elasticsearch.search.aggregations.Aggregator;
@@ -125,17 +124,17 @@ public final DeferringBucketCollector buildDeferringCollector() {
125124
return deferringCollector;
126125
}
127126

128-
protected abstract LeafBucketCollector getLeafCollector(SortedNumericDocValues values, LeafBucketCollector sub) throws IOException;
127+
protected abstract LeafBucketCollector getLeafCollector(SortedNumericLongValues values, LeafBucketCollector sub) throws IOException;
129128

130-
protected abstract LeafBucketCollector getLeafCollector(NumericDocValues values, LeafBucketCollector sub) throws IOException;
129+
protected abstract LeafBucketCollector getLeafCollector(LongValues values, LeafBucketCollector sub) throws IOException;
131130

132131
@Override
133132
public final LeafBucketCollector getLeafCollector(AggregationExecutionContext aggCtx, LeafBucketCollector sub) throws IOException {
134133
if (valuesSource == null) {
135134
return LeafBucketCollector.NO_OP_COLLECTOR;
136135
}
137-
final SortedNumericDocValues values = valuesSource.longValues(aggCtx.getLeafReaderContext());
138-
final NumericDocValues singleton = DocValues.unwrapSingleton(values);
136+
final SortedNumericLongValues values = valuesSource.longValues(aggCtx.getLeafReaderContext());
137+
final LongValues singleton = SortedNumericLongValues.unwrapSingleton(values);
139138
return singleton != null ? getLeafCollector(singleton, sub) : getLeafCollector(values, sub);
140139
}
141140

@@ -239,7 +238,7 @@ private static class FromSingle extends AutoDateHistogramAggregator {
239238
}
240239

241240
@Override
242-
protected LeafBucketCollector getLeafCollector(SortedNumericDocValues values, LeafBucketCollector sub) {
241+
protected LeafBucketCollector getLeafCollector(SortedNumericLongValues values, LeafBucketCollector sub) {
243242
return new LeafBucketCollectorBase(sub, values) {
244243
@Override
245244
public void collect(int doc, long owningBucketOrd) throws IOException {
@@ -265,7 +264,7 @@ public void collect(int doc, long owningBucketOrd) throws IOException {
265264
}
266265

267266
@Override
268-
protected LeafBucketCollector getLeafCollector(NumericDocValues values, LeafBucketCollector sub) {
267+
protected LeafBucketCollector getLeafCollector(LongValues values, LeafBucketCollector sub) {
269268
return new LeafBucketCollectorBase(sub, values) {
270269
@Override
271270
public void collect(int doc, long owningBucketOrd) throws IOException {
@@ -461,7 +460,7 @@ private static class FromMany extends AutoDateHistogramAggregator {
461460
}
462461

463462
@Override
464-
protected LeafBucketCollector getLeafCollector(SortedNumericDocValues values, LeafBucketCollector sub) {
463+
protected LeafBucketCollector getLeafCollector(SortedNumericLongValues values, LeafBucketCollector sub) {
465464
return new LeafBucketCollectorBase(sub, values) {
466465
@Override
467466
public void collect(int doc, long owningBucketOrd) throws IOException {
@@ -487,7 +486,7 @@ public void collect(int doc, long owningBucketOrd) throws IOException {
487486
}
488487

489488
@Override
490-
protected LeafBucketCollector getLeafCollector(NumericDocValues values, LeafBucketCollector sub) {
489+
protected LeafBucketCollector getLeafCollector(LongValues values, LeafBucketCollector sub) {
491490
return new LeafBucketCollectorBase(sub, values) {
492491
@Override
493492
public void collect(int doc, long owningBucketOrd) throws IOException {

modules/aggregations/src/main/java/org/elasticsearch/aggregations/bucket/timeseries/TimeSeriesAggregator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
package org.elasticsearch.aggregations.bucket.timeseries;
1111

12-
import org.apache.lucene.index.SortedNumericDocValues;
1312
import org.apache.lucene.util.BytesRef;
1413
import org.elasticsearch.common.util.LongArray;
1514
import org.elasticsearch.common.util.ObjectArray;
1615
import org.elasticsearch.core.Releasables;
1716
import org.elasticsearch.index.fielddata.SortedBinaryDocValues;
17+
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
1818
import org.elasticsearch.index.mapper.RoutingPathFields;
1919
import org.elasticsearch.index.mapper.TimeSeriesIdFieldMapper;
2020
import org.elasticsearch.search.aggregations.AggregationExecutionContext;
@@ -121,7 +121,7 @@ protected LeafBucketCollector getLeafCollector(AggregationExecutionContext aggCt
121121
for (var entry : dimensionValueSources.entrySet()) {
122122
String fieldName = entry.getKey();
123123
if (entry.getValue() instanceof ValuesSource.Numeric numericVS) {
124-
SortedNumericDocValues docValues = numericVS.longValues(aggCtx.getLeafReaderContext());
124+
SortedNumericLongValues docValues = numericVS.longValues(aggCtx.getLeafReaderContext());
125125
dimensionConsumers.put(entry.getKey(), (docId, tsidBuilder) -> {
126126
if (docValues.advanceExact(docId)) {
127127
assert docValues.docValueCount() == 1 : "Dimension field cannot be a multi-valued field";

modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/ScaledFloatFieldMapper.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,8 @@
99

1010
package org.elasticsearch.index.mapper.extras;
1111

12-
import org.apache.lucene.index.DocValues;
1312
import org.apache.lucene.index.LeafReaderContext;
14-
import org.apache.lucene.index.NumericDocValues;
15-
import org.apache.lucene.index.SortedNumericDocValues;
13+
import org.apache.lucene.search.LongValues;
1614
import org.apache.lucene.search.Query;
1715
import org.elasticsearch.common.Explicit;
1816
import org.elasticsearch.common.settings.Setting;
@@ -28,6 +26,7 @@
2826
import org.elasticsearch.index.fielddata.LeafNumericFieldData;
2927
import org.elasticsearch.index.fielddata.NumericDoubleValues;
3028
import org.elasticsearch.index.fielddata.SortedNumericDoubleValues;
29+
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
3130
import org.elasticsearch.index.fielddata.SourceValueFetcherSortedDoubleIndexFieldData;
3231
import org.elasticsearch.index.fielddata.plain.LeafDoubleFieldData;
3332
import org.elasticsearch.index.fielddata.plain.SortedNumericIndexFieldData;
@@ -831,8 +830,8 @@ public void close() {
831830

832831
@Override
833832
public SortedNumericDoubleValues getDoubleValues() {
834-
final SortedNumericDocValues values = scaledFieldData.getLongValues();
835-
final NumericDocValues singleValues = DocValues.unwrapSingleton(values);
833+
final SortedNumericLongValues values = scaledFieldData.getLongValues();
834+
final LongValues singleValues = SortedNumericLongValues.unwrapSingleton(values);
836835
if (singleValues != null) {
837836
return FieldData.singleton(new NumericDoubleValues() {
838837
@Override

plugins/mapper-murmur3/src/main/java/org/elasticsearch/script/field/murmur3/Murmur3DocValueField.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99

1010
package org.elasticsearch.script.field.murmur3;
1111

12-
import org.apache.lucene.index.SortedNumericDocValues;
12+
import org.elasticsearch.index.fielddata.SortedNumericLongValues;
1313
import org.elasticsearch.script.field.AbstractLongDocValuesField;
1414

1515
public class Murmur3DocValueField extends AbstractLongDocValuesField {
1616

17-
public Murmur3DocValueField(SortedNumericDocValues input, String name) {
17+
public Murmur3DocValueField(SortedNumericLongValues input, String name) {
1818
super(input, name);
1919
}
2020
}

server/src/main/java/org/elasticsearch/index/fielddata/AbstractSortedNumericDocValues.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

server/src/main/java/org/elasticsearch/index/fielddata/AbstractSortingNumericDocValues.java

Lines changed: 0 additions & 53 deletions
This file was deleted.

server/src/main/java/org/elasticsearch/index/fielddata/BooleanScriptDocValues.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import org.elasticsearch.script.BooleanFieldScript;
1313

14-
public final class BooleanScriptDocValues extends AbstractSortedNumericDocValues {
14+
public final class BooleanScriptDocValues extends SortedNumericLongValues {
1515
private final BooleanFieldScript script;
1616
private int cursor;
1717

server/src/main/java/org/elasticsearch/index/fielddata/BooleanScriptFieldData.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.elasticsearch.index.fielddata;
1111

1212
import org.apache.lucene.index.LeafReaderContext;
13-
import org.apache.lucene.index.SortedNumericDocValues;
1413
import org.elasticsearch.ExceptionsHelper;
1514
import org.elasticsearch.index.fielddata.plain.LeafLongFieldData;
1615
import org.elasticsearch.indices.breaker.CircuitBreakerService;
@@ -25,12 +24,12 @@ public final class BooleanScriptFieldData extends IndexNumericFieldData {
2524
public static class Builder implements IndexFieldData.Builder {
2625
private final String name;
2726
private final BooleanFieldScript.LeafFactory leafFactory;
28-
protected final ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory;
27+
protected final ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory;
2928

3029
public Builder(
3130
String name,
3231
BooleanFieldScript.LeafFactory leafFactory,
33-
ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory
32+
ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory
3433
) {
3534
this.name = name;
3635
this.leafFactory = leafFactory;
@@ -45,12 +44,12 @@ public BooleanScriptFieldData build(IndexFieldDataCache cache, CircuitBreakerSer
4544

4645
private final String fieldName;
4746
private final BooleanFieldScript.LeafFactory leafFactory;
48-
protected final ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory;
47+
protected final ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory;
4948

5049
private BooleanScriptFieldData(
5150
String fieldName,
5251
BooleanFieldScript.LeafFactory leafFactory,
53-
ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory
52+
ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory
5453
) {
5554
this.fieldName = fieldName;
5655
this.leafFactory = leafFactory;
@@ -98,19 +97,19 @@ protected boolean isIndexed() {
9897

9998
public static class BooleanScriptLeafFieldData extends LeafLongFieldData {
10099
private final BooleanScriptDocValues booleanScriptDocValues;
101-
protected final ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory;
100+
protected final ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory;
102101

103102
BooleanScriptLeafFieldData(
104103
BooleanScriptDocValues booleanScriptDocValues,
105-
ToScriptFieldFactory<SortedNumericDocValues> toScriptFieldFactory
104+
ToScriptFieldFactory<SortedNumericLongValues> toScriptFieldFactory
106105
) {
107106
super(0);
108107
this.booleanScriptDocValues = booleanScriptDocValues;
109108
this.toScriptFieldFactory = toScriptFieldFactory;
110109
}
111110

112111
@Override
113-
public SortedNumericDocValues getLongValues() {
112+
public SortedNumericLongValues getLongValues() {
114113
return booleanScriptDocValues;
115114
}
116115

0 commit comments

Comments
 (0)