Skip to content

Commit f435afd

Browse files
committed
iter5
1 parent fa845b6 commit f435afd

File tree

9 files changed

+34
-49
lines changed

9 files changed

+34
-49
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ public Builder builder(BlockFactory factory, int expectedCount) {
399399
}
400400
};
401401
}
402-
ValueFetcher valueFetcher = sourceValueFetcher(blContext.sourcePaths(name()), blContext.indexSettings());
402+
var valueFetcher = sourceValueFetcher(blContext.sourcePaths(name()), blContext.indexSettings());
403403
BlockSourceReader.LeafIteratorLookup lookup = hasDocValues() == false && isStored()
404404
// We only write the field names field if there aren't doc values
405405
? BlockSourceReader.lookupFromFieldNames(blContext.fieldNames(), name())

server/src/main/java/org/elasticsearch/index/mapper/AbstractGeometryFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ protected Object parseSourceValue(Object value) {
173173
};
174174
}
175175

176-
public ValueFetcher valueFetcher(Set<String> sourcePaths, T nullValue, String format, IndexSettings indexSettings) {
176+
public SourceBasedValueFetcher valueFetcher(Set<String> sourcePaths, T nullValue, String format, IndexSettings indexSettings) {
177177
Function<List<T>, List<Object>> formatter = getFormatter(format != null ? format : GeometryFormatterFactory.GEOJSON);
178178
return new ArraySourceValueFetcher(sourcePaths, nullValueAsSource(nullValue), indexSettings.getIgnoredSourceFormat()) {
179179
@Override

server/src/main/java/org/elasticsearch/index/mapper/ArraySourceValueFetcher.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* array values in parsing. Field types should use this class if their corresponding
2929
* mapper returns true for {@link FieldMapper#parsesArrayValue()}.
3030
*/
31-
public abstract class ArraySourceValueFetcher implements ValueFetcher {
31+
public abstract class ArraySourceValueFetcher implements SourceBasedValueFetcher {
3232
private final Set<String> sourcePaths;
3333
private final @Nullable Object nullValue;
3434
private final IgnoredSourceFormat ignoredSourceFormat;
@@ -80,15 +80,7 @@ public List<Object> fetchValues(Source source, int doc, List<Object> ignoredValu
8080

8181
@Override
8282
public StoredFieldsSpec storedFieldsSpec() {
83-
return StoredFieldsSpec.NEEDS_SOURCE;
84-
}
85-
86-
public Set<String> getSourcePaths() {
87-
return sourcePaths;
88-
}
89-
90-
public IgnoredSourceFormat getIgnoredSourceFormat() {
91-
return ignoredSourceFormat;
83+
return StoredFieldsSpec.withSourcePaths(ignoredSourceFormat, sourcePaths);
9284
}
9385

9486
/**

server/src/main/java/org/elasticsearch/index/mapper/BlockSourceReader.java

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,13 @@
1818
import org.apache.lucene.search.DocIdSetIterator;
1919
import org.apache.lucene.util.BytesRef;
2020
import org.apache.lucene.util.UnicodeUtil;
21-
import org.elasticsearch.index.mapper.IgnoredSourceFieldMapper.IgnoredSourceFormat;
2221
import org.elasticsearch.search.fetch.StoredFieldsSpec;
2322

2423
import java.io.IOException;
2524
import java.net.InetAddress;
2625
import java.util.ArrayList;
2726
import java.util.List;
2827
import java.util.Objects;
29-
import java.util.Set;
3028

3129
/**
3230
* Loads values from {@code _source}. This whole process is very slow and cast-tastic,
@@ -96,22 +94,10 @@ public interface LeafIteratorLookup {
9694
private abstract static class SourceBlockLoader implements BlockLoader {
9795
protected final ValueFetcher fetcher;
9896
private final LeafIteratorLookup lookup;
99-
private final Set<String> sourcePaths;
100-
private final IgnoredSourceFormat ignoredSourceFormat;
10197

102-
private SourceBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
98+
private SourceBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
10399
this.fetcher = fetcher;
104100
this.lookup = lookup;
105-
if (fetcher instanceof SourceValueFetcher sourceValueFetcher) {
106-
this.sourcePaths = sourceValueFetcher.getSourcePaths();
107-
this.ignoredSourceFormat = sourceValueFetcher.getIgnoredSourceFormat();
108-
} else if (fetcher instanceof ArraySourceValueFetcher arraySourceValueFetcher) {
109-
this.sourcePaths = arraySourceValueFetcher.getSourcePaths();
110-
this.ignoredSourceFormat = arraySourceValueFetcher.getIgnoredSourceFormat();
111-
} else {
112-
// TODO: maybe introduce a common interface for SourceValueFetcher and ArraySourceValueFetcher?
113-
throw new IllegalStateException("unexpected fetcher type " + fetcher);
114-
}
115101
}
116102

117103
@Override
@@ -121,7 +107,7 @@ public final ColumnAtATimeReader columnAtATimeReader(LeafReaderContext context)
121107

122108
@Override
123109
public final StoredFieldsSpec rowStrideStoredFieldSpec() {
124-
return StoredFieldsSpec.withSourcePaths(ignoredSourceFormat, sourcePaths);
110+
return fetcher.storedFieldsSpec();
125111
}
126112

127113
@Override
@@ -157,7 +143,7 @@ public final String toString() {
157143
* Load {@code boolean}s from {@code _source}.
158144
*/
159145
public static class BooleansBlockLoader extends SourceBlockLoader {
160-
public BooleansBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
146+
public BooleansBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
161147
super(fetcher, lookup);
162148
}
163149

@@ -197,7 +183,7 @@ public String toString() {
197183
* Load {@link BytesRef}s from {@code _source}.
198184
*/
199185
public static class BytesRefsBlockLoader extends SourceBlockLoader {
200-
public BytesRefsBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
186+
public BytesRefsBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
201187
super(fetcher, lookup);
202188
}
203189

@@ -218,7 +204,7 @@ protected String name() {
218204
}
219205

220206
public static class GeometriesBlockLoader extends SourceBlockLoader {
221-
public GeometriesBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
207+
public GeometriesBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
222208
super(fetcher, lookup);
223209
}
224210

@@ -281,7 +267,7 @@ public String toString() {
281267
* Load {@code double}s from {@code _source}.
282268
*/
283269
public static class DoublesBlockLoader extends SourceBlockLoader {
284-
public DoublesBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
270+
public DoublesBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
285271
super(fetcher, lookup);
286272
}
287273

@@ -323,7 +309,7 @@ public String toString() {
323309
public static class DenseVectorBlockLoader extends SourceBlockLoader {
324310
private final int dimensions;
325311

326-
public DenseVectorBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup, int dimensions) {
312+
public DenseVectorBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup, int dimensions) {
327313
super(fetcher, lookup);
328314
this.dimensions = dimensions;
329315
}
@@ -364,7 +350,7 @@ public String toString() {
364350
* Load {@code int}s from {@code _source}.
365351
*/
366352
public static class IntsBlockLoader extends SourceBlockLoader {
367-
public IntsBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
353+
public IntsBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
368354
super(fetcher, lookup);
369355
}
370356

@@ -404,7 +390,7 @@ public String toString() {
404390
* Load {@code long}s from {@code _source}.
405391
*/
406392
public static class LongsBlockLoader extends SourceBlockLoader {
407-
public LongsBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
393+
public LongsBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
408394
super(fetcher, lookup);
409395
}
410396

@@ -444,7 +430,7 @@ public String toString() {
444430
* Load {@code ip}s from {@code _source}.
445431
*/
446432
public static class IpsBlockLoader extends SourceBlockLoader {
447-
public IpsBlockLoader(ValueFetcher fetcher, LeafIteratorLookup lookup) {
433+
public IpsBlockLoader(SourceBasedValueFetcher fetcher, LeafIteratorLookup lookup) {
448434
super(fetcher, lookup);
449435
}
450436

server/src/main/java/org/elasticsearch/index/mapper/BooleanFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ public Builder builder(BlockFactory factory, int expectedCount) {
368368
};
369369
}
370370

371-
ValueFetcher fetcher = sourceValueFetcher(blContext.sourcePaths(name()), blContext.indexSettings());
371+
var fetcher = sourceValueFetcher(blContext.sourcePaths(name()), blContext.indexSettings());
372372
BlockSourceReader.LeafIteratorLookup lookup = indexType.hasTerms() || isStored()
373373
? BlockSourceReader.lookupFromFieldNames(blContext.fieldNames(), name())
374374
: BlockSourceReader.lookupMatchingAll();
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.index.mapper;
11+
12+
/**
13+
* Marker interface for {@link ValueFetcher} implementations that fetch values from the source.
14+
*/
15+
public interface SourceBasedValueFetcher extends ValueFetcher {}

server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
*
3131
* Field types that handle arrays directly should instead use {@link ArraySourceValueFetcher}.
3232
*/
33-
public abstract class SourceValueFetcher implements ValueFetcher {
33+
public abstract class SourceValueFetcher implements SourceBasedValueFetcher {
3434
private final Set<String> sourcePaths;
3535
private final @Nullable Object nullValue;
3636
private final IgnoredSourceFormat ignoredSourceFormat;
@@ -107,15 +107,7 @@ public List<Object> fetchValues(Source source, int doc, List<Object> ignoredValu
107107

108108
@Override
109109
public StoredFieldsSpec storedFieldsSpec() {
110-
return StoredFieldsSpec.NEEDS_SOURCE;
111-
}
112-
113-
public Set<String> getSourcePaths() {
114-
return sourcePaths;
115-
}
116-
117-
public IgnoredSourceFormat getIgnoredSourceFormat() {
118-
return ignoredSourceFormat;
110+
return StoredFieldsSpec.withSourcePaths(ignoredSourceFormat, sourcePaths);
119111
}
120112

121113
/**

server/src/test/java/org/elasticsearch/index/mapper/BlockSourceReaderTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private void loadBlock(LeafReaderContext ctx, Consumer<TestBlock> test) throws I
6767
)
6868
.build();
6969
IndexSettings indexSettings = new IndexSettings(indexMetadata, Settings.EMPTY);
70-
ValueFetcher valueFetcher = SourceValueFetcher.toString(Set.of("field"), indexSettings);
70+
var valueFetcher = SourceValueFetcher.toString(Set.of("field"), indexSettings);
7171
BlockSourceReader.LeafIteratorLookup lookup = BlockSourceReader.lookupFromNorms("field");
7272
BlockLoader loader = new BlockSourceReader.BytesRefsBlockLoader(valueFetcher, lookup);
7373
assertThat(loader.columnAtATimeReader(ctx), nullValue());

x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ public Builder builder(BlockFactory factory, int expectedCount) {
400400
}
401401

402402
var ignoredSourceFormat = blContext.indexSettings().getIgnoredSourceFormat();
403-
ValueFetcher valueFetcher = new SourceValueFetcher(blContext.sourcePaths(name()), nullValueFormatted, ignoredSourceFormat) {
403+
var valueFetcher = new SourceValueFetcher(blContext.sourcePaths(name()), nullValueFormatted, ignoredSourceFormat) {
404404
@Override
405405
protected Object parseSourceValue(Object value) {
406406
if (value.equals("")) {

0 commit comments

Comments
 (0)