22
22
import java .io .IOException ;
23
23
import java .util .ArrayList ;
24
24
import java .util .List ;
25
+ import java .util .Set ;
25
26
26
27
/**
27
28
* Loads values from {@code _source}. This whole process is very slow and cast-tastic,
28
29
* so it doesn't really try to avoid megamorphic invocations. It's just going to be
29
30
* slow.
30
31
*/
31
32
public abstract class BlockSourceReader implements BlockLoader .RowStrideReader {
33
+
34
+ // _ignored_source is needed when source mode is synthetic.
35
+ static final StoredFieldsSpec NEEDS_SOURCE_AND_IGNORED_SOURCE = new StoredFieldsSpec (
36
+ true ,
37
+ false ,
38
+ Set .of (IgnoredSourceFieldMapper .NAME )
39
+ );
40
+
32
41
private final ValueFetcher fetcher ;
33
42
private final List <Object > ignoredValues = new ArrayList <>();
34
43
private final DocIdSetIterator iter ;
@@ -91,10 +100,12 @@ public interface LeafIteratorLookup {
91
100
private abstract static class SourceBlockLoader implements BlockLoader {
92
101
protected final ValueFetcher fetcher ;
93
102
private final LeafIteratorLookup lookup ;
103
+ private final SourceFieldMapper .Mode sourceMode ;
94
104
95
- private SourceBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
105
+ private SourceBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
96
106
this .fetcher = fetcher ;
97
107
this .lookup = lookup ;
108
+ this .sourceMode = sourceMode ;
98
109
}
99
110
100
111
@ Override
@@ -104,7 +115,7 @@ public final ColumnAtATimeReader columnAtATimeReader(LeafReaderContext context)
104
115
105
116
@ Override
106
117
public final StoredFieldsSpec rowStrideStoredFieldSpec () {
107
- return StoredFieldsSpec .NEEDS_SOURCE ;
118
+ return sourceMode == SourceFieldMapper . Mode . SYNTHETIC ? NEEDS_SOURCE_AND_IGNORED_SOURCE : StoredFieldsSpec .NEEDS_SOURCE ;
108
119
}
109
120
110
121
@ Override
@@ -140,8 +151,8 @@ public final String toString() {
140
151
* Load {@code boolean}s from {@code _source}.
141
152
*/
142
153
public static class BooleansBlockLoader extends SourceBlockLoader {
143
- public BooleansBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
144
- super (fetcher , lookup );
154
+ public BooleansBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
155
+ super (fetcher , lookup , sourceMode );
145
156
}
146
157
147
158
@ Override
@@ -180,8 +191,8 @@ public String toString() {
180
191
* Load {@link BytesRef}s from {@code _source}.
181
192
*/
182
193
public static class BytesRefsBlockLoader extends SourceBlockLoader {
183
- public BytesRefsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
184
- super (fetcher , lookup );
194
+ public BytesRefsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
195
+ super (fetcher , lookup , sourceMode );
185
196
}
186
197
187
198
@ Override
@@ -191,7 +202,7 @@ public final Builder builder(BlockFactory factory, int expectedCount) {
191
202
192
203
@ Override
193
204
protected RowStrideReader rowStrideReader (LeafReaderContext context , DocIdSetIterator iter ) throws IOException {
194
- return new BytesRefs (fetcher , iter );
205
+ return new BytesRefs (fetcher , iter , null );
195
206
}
196
207
197
208
@ Override
@@ -201,8 +212,8 @@ protected String name() {
201
212
}
202
213
203
214
public static class GeometriesBlockLoader extends SourceBlockLoader {
204
- public GeometriesBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
205
- super (fetcher , lookup );
215
+ public GeometriesBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
216
+ super (fetcher , lookup , sourceMode );
206
217
}
207
218
208
219
@ Override
@@ -212,7 +223,7 @@ public final Builder builder(BlockFactory factory, int expectedCount) {
212
223
213
224
@ Override
214
225
protected RowStrideReader rowStrideReader (LeafReaderContext context , DocIdSetIterator iter ) {
215
- return new Geometries (fetcher , iter );
226
+ return new Geometries (fetcher , iter , null );
216
227
}
217
228
218
229
@ Override
@@ -224,7 +235,7 @@ protected String name() {
224
235
private static class BytesRefs extends BlockSourceReader {
225
236
private final BytesRef scratch = new BytesRef ();
226
237
227
- BytesRefs (ValueFetcher fetcher , DocIdSetIterator iter ) {
238
+ BytesRefs (ValueFetcher fetcher , DocIdSetIterator iter , SourceFieldMapper . Mode sourceMode ) {
228
239
super (fetcher , iter );
229
240
}
230
241
@@ -241,7 +252,7 @@ public String toString() {
241
252
242
253
private static class Geometries extends BlockSourceReader {
243
254
244
- Geometries (ValueFetcher fetcher , DocIdSetIterator iter ) {
255
+ Geometries (ValueFetcher fetcher , DocIdSetIterator iter , SourceFieldMapper . Mode sourceMode ) {
245
256
super (fetcher , iter );
246
257
}
247
258
@@ -264,8 +275,8 @@ public String toString() {
264
275
* Load {@code double}s from {@code _source}.
265
276
*/
266
277
public static class DoublesBlockLoader extends SourceBlockLoader {
267
- public DoublesBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
268
- super (fetcher , lookup );
278
+ public DoublesBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
279
+ super (fetcher , lookup , sourceMode );
269
280
}
270
281
271
282
@ Override
@@ -304,8 +315,8 @@ public String toString() {
304
315
* Load {@code int}s from {@code _source}.
305
316
*/
306
317
public static class IntsBlockLoader extends SourceBlockLoader {
307
- public IntsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
308
- super (fetcher , lookup );
318
+ public IntsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
319
+ super (fetcher , lookup , sourceMode );
309
320
}
310
321
311
322
@ Override
@@ -344,8 +355,8 @@ public String toString() {
344
355
* Load {@code long}s from {@code _source}.
345
356
*/
346
357
public static class LongsBlockLoader extends SourceBlockLoader {
347
- public LongsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup ) {
348
- super (fetcher , lookup );
358
+ public LongsBlockLoader (ValueFetcher fetcher , LeafIteratorLookup lookup , SourceFieldMapper . Mode sourceMode ) {
359
+ super (fetcher , lookup , sourceMode );
349
360
}
350
361
351
362
@ Override
0 commit comments