Skip to content

Commit 50c247c

Browse files
authored
Use IndexSettings directly in a number of Builder constructors (#137807)
This replaces multiple parameters with a single IndexSettings parameter (from which all those other parameters are derived) for the following mappers: * NumberFieldMapper * BooleanFieldMapper * UnsignedLongFieldMapper * IpFieldMapper * GeoPointFieldMapper
1 parent 7862d7f commit 50c247c

File tree

19 files changed

+163
-453
lines changed

19 files changed

+163
-453
lines changed

modules/percolator/src/main/java/org/elasticsearch/percolator/PercolatorFieldMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ static NumberFieldMapper createMinimumShouldMatchField(MapperBuilderContext cont
191191
NumberFieldMapper.Builder builder = NumberFieldMapper.Builder.docValuesOnly(
192192
MINIMUM_SHOULD_MATCH_FIELD_NAME,
193193
NumberFieldMapper.NumberType.INTEGER,
194-
indexSettings.getIndexVersionCreated()
194+
indexSettings
195195
);
196196
return builder.build(context);
197197
}

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

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.elasticsearch.core.Booleans;
2828
import org.elasticsearch.core.Nullable;
2929
import org.elasticsearch.index.IndexSettings;
30-
import org.elasticsearch.index.IndexVersion;
3130
import org.elasticsearch.index.IndexVersions;
3231
import org.elasticsearch.index.analysis.NamedAnalyzer;
3332
import org.elasticsearch.index.fielddata.FieldDataContext;
@@ -103,27 +102,19 @@ public static final class Builder extends FieldMapper.DimensionBuilder {
103102

104103
private final ScriptCompiler scriptCompiler;
105104

106-
private final IndexVersion indexCreatedVersion;
107-
108-
private final SourceKeepMode indexSourceKeepMode;
105+
private final IndexSettings indexSettings;
109106

110107
private final Parameter<Boolean> dimension;
111108

112-
public Builder(
113-
String name,
114-
ScriptCompiler scriptCompiler,
115-
boolean ignoreMalformedByDefault,
116-
IndexVersion indexCreatedVersion,
117-
SourceKeepMode indexSourceKeepMode
118-
) {
109+
public Builder(String name, ScriptCompiler scriptCompiler, IndexSettings indexSettings) {
119110
super(name);
120111
this.scriptCompiler = Objects.requireNonNull(scriptCompiler);
121-
this.indexCreatedVersion = Objects.requireNonNull(indexCreatedVersion);
112+
this.indexSettings = Objects.requireNonNull(indexSettings);
122113
this.ignoreMalformed = Parameter.explicitBoolParam(
123114
"ignore_malformed",
124115
true,
125116
m -> toType(m).ignoreMalformed,
126-
ignoreMalformedByDefault
117+
IGNORE_MALFORMED_SETTING.get(indexSettings.getSettings())
127118
);
128119
this.script.precludesParameters(ignoreMalformed, nullValue);
129120
addScriptValidation(script, indexed, docValues);
@@ -140,8 +131,6 @@ public Builder(
140131
);
141132
}
142133
});
143-
144-
this.indexSourceKeepMode = indexSourceKeepMode;
145134
}
146135

147136
public Builder dimension(boolean dimension) {
@@ -170,7 +159,7 @@ public BooleanFieldMapper build(MapperBuilderContext context) {
170159
}
171160
MappedFieldType ft = new BooleanFieldType(
172161
context.buildFullName(leafName()),
173-
indexed.getValue() && indexCreatedVersion.isLegacyIndexVersion() == false,
162+
indexed.getValue() && indexSettings.getIndexVersionCreated().isLegacyIndexVersion() == false,
174163
stored.getValue(),
175164
docValues.getValue(),
176165
nullValue.getValue(),
@@ -183,11 +172,11 @@ public BooleanFieldMapper build(MapperBuilderContext context) {
183172
onScriptError = onScriptErrorParam.getValue();
184173
String offsetsFieldName = getOffsetsFieldName(
185174
context,
186-
indexSourceKeepMode,
175+
indexSettings.sourceKeepMode(),
187176
docValues.getValue(),
188177
stored.getValue(),
189178
this,
190-
indexCreatedVersion,
179+
indexSettings.getIndexVersionCreated(),
191180
IndexVersions.SYNTHETIC_SOURCE_STORE_ARRAYS_NATIVELY_BOOLEAN
192181
);
193182
return new BooleanFieldMapper(
@@ -214,13 +203,7 @@ private FieldValues<Boolean> scriptValues() {
214203
}
215204

216205
public static final TypeParser PARSER = createTypeParserWithLegacySupport(
217-
(n, c) -> new Builder(
218-
n,
219-
c.scriptCompiler(),
220-
IGNORE_MALFORMED_SETTING.get(c.getSettings()),
221-
c.indexVersionCreated(),
222-
c.getIndexSettings().sourceKeepMode()
223-
)
206+
(n, c) -> new Builder(n, c.scriptCompiler(), c.getIndexSettings())
224207
);
225208

226209
public static final class BooleanFieldType extends TermBasedFieldType {
@@ -522,14 +505,11 @@ public Query rangeQuery(
522505
private final Script script;
523506
private final FieldValues<Boolean> scriptValues;
524507
private final ScriptCompiler scriptCompiler;
525-
private final IndexVersion indexCreatedVersion;
526508
private final Explicit<Boolean> ignoreMalformed;
527-
private final boolean ignoreMalformedByDefault;
528-
509+
private final IndexSettings indexSettings;
529510
private final boolean storeMalformedFields;
530511

531512
private final String offsetsFieldName;
532-
private final SourceKeepMode indexSourceKeepMode;
533513

534514
protected BooleanFieldMapper(
535515
String simpleName,
@@ -547,12 +527,10 @@ protected BooleanFieldMapper(
547527
this.script = builder.script.get();
548528
this.scriptValues = builder.scriptValues();
549529
this.scriptCompiler = builder.scriptCompiler;
550-
this.indexCreatedVersion = builder.indexCreatedVersion;
530+
this.indexSettings = builder.indexSettings;
551531
this.ignoreMalformed = builder.ignoreMalformed.getValue();
552-
this.ignoreMalformedByDefault = builder.ignoreMalformed.getDefaultValue().value();
553532
this.storeMalformedFields = storeMalformedFields;
554533
this.offsetsFieldName = offsetsFieldName;
555-
this.indexSourceKeepMode = builder.indexSourceKeepMode;
556534
}
557535

558536
@Override
@@ -641,9 +619,7 @@ protected void indexScriptValues(
641619

642620
@Override
643621
public FieldMapper.Builder getMergeBuilder() {
644-
return new Builder(leafName(), scriptCompiler, ignoreMalformedByDefault, indexCreatedVersion, indexSourceKeepMode).dimension(
645-
fieldType().isDimension()
646-
).init(this);
622+
return new Builder(leafName(), scriptCompiler, indexSettings).dimension(fieldType().isDimension()).init(this);
647623
}
648624

649625
@Override

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

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -347,15 +347,7 @@ public boolean newDynamicStringField(DocumentParserContext context, String name)
347347
@Override
348348
public boolean newDynamicLongField(DocumentParserContext context, String name) throws IOException {
349349
return createDynamicField(
350-
new NumberFieldMapper.Builder(
351-
name,
352-
NumberFieldMapper.NumberType.LONG,
353-
ScriptCompiler.NONE,
354-
context.indexSettings().getSettings(),
355-
context.indexSettings().getIndexVersionCreated(),
356-
context.indexSettings().getMode(),
357-
context.indexSettings().sourceKeepMode()
358-
),
350+
new NumberFieldMapper.Builder(name, NumberFieldMapper.NumberType.LONG, ScriptCompiler.NONE, context.indexSettings()),
359351
context
360352
);
361353
}
@@ -366,33 +358,14 @@ public boolean newDynamicDoubleField(DocumentParserContext context, String name)
366358
// since this is much more space-efficient and should be enough most of
367359
// the time
368360
return createDynamicField(
369-
new NumberFieldMapper.Builder(
370-
name,
371-
NumberFieldMapper.NumberType.FLOAT,
372-
ScriptCompiler.NONE,
373-
context.indexSettings().getSettings(),
374-
context.indexSettings().getIndexVersionCreated(),
375-
context.indexSettings().getMode(),
376-
context.indexSettings().sourceKeepMode()
377-
),
361+
new NumberFieldMapper.Builder(name, NumberFieldMapper.NumberType.FLOAT, ScriptCompiler.NONE, context.indexSettings()),
378362
context
379363
);
380364
}
381365

382366
@Override
383367
public boolean newDynamicBooleanField(DocumentParserContext context, String name) throws IOException {
384-
Settings settings = context.indexSettings().getSettings();
385-
boolean ignoreMalformed = FieldMapper.IGNORE_MALFORMED_SETTING.get(settings);
386-
return createDynamicField(
387-
new BooleanFieldMapper.Builder(
388-
name,
389-
ScriptCompiler.NONE,
390-
ignoreMalformed,
391-
context.indexSettings().getIndexVersionCreated(),
392-
context.indexSettings().sourceKeepMode()
393-
),
394-
context
395-
);
368+
return createDynamicField(new BooleanFieldMapper.Builder(name, ScriptCompiler.NONE, context.indexSettings()), context);
396369
}
397370

398371
@Override

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

Lines changed: 23 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import org.elasticsearch.geometry.Point;
3838
import org.elasticsearch.geometry.utils.WellKnownBinary;
3939
import org.elasticsearch.index.IndexMode;
40-
import org.elasticsearch.index.IndexVersion;
40+
import org.elasticsearch.index.IndexSettings;
4141
import org.elasticsearch.index.fielddata.FieldDataContext;
4242
import org.elasticsearch.index.fielddata.IndexFieldData;
4343
import org.elasticsearch.index.fielddata.SourceValueFetcherMultiGeoPointIndexFieldData;
@@ -108,35 +108,30 @@ public static final class Builder extends FieldMapper.Builder {
108108
script
109109
);
110110
final Parameter<Map<String, String>> meta = Parameter.metaParam();
111-
112-
private final ScriptCompiler scriptCompiler;
113-
private final IndexVersion indexCreatedVersion;
114111
private final Parameter<TimeSeriesParams.MetricType> metric; // either null, or POSITION if this is a time series metric
115112
private final Parameter<Boolean> dimension; // can only support time_series_dimension: false
116-
private final IndexMode indexMode; // either STANDARD or TIME_SERIES
117113

118-
public Builder(
119-
String name,
120-
ScriptCompiler scriptCompiler,
121-
boolean ignoreMalformedByDefault,
122-
IndexVersion indexCreatedVersion,
123-
IndexMode mode
124-
) {
114+
private final ScriptCompiler scriptCompiler;
115+
private final IndexSettings indexSettings;
116+
117+
public Builder(String name, ScriptCompiler scriptCompiler, IndexSettings indexSettings) {
125118
super(name);
126-
this.ignoreMalformed = ignoreMalformedParam(m -> builder(m).ignoreMalformed.get(), ignoreMalformedByDefault);
119+
this.ignoreMalformed = ignoreMalformedParam(
120+
m -> builder(m).ignoreMalformed.get(),
121+
IGNORE_MALFORMED_SETTING.get(indexSettings.getSettings())
122+
);
127123
this.nullValue = nullValueParam(
128124
m -> builder(m).nullValue.get(),
129125
(n, c, o) -> parseNullValue(o, ignoreZValue.get().value(), ignoreMalformed.get().value()),
130126
() -> null,
131127
XContentBuilder::field
132128
).acceptsNull();
133129
this.scriptCompiler = Objects.requireNonNull(scriptCompiler);
134-
this.indexCreatedVersion = Objects.requireNonNull(indexCreatedVersion);
130+
this.indexSettings = Objects.requireNonNull(indexSettings);
135131
this.script.precludesParameters(nullValue, ignoreMalformed, ignoreZValue);
136-
this.indexMode = mode;
137132
this.indexed = Parameter.indexParam(
138133
m -> toType(m).indexed,
139-
() -> indexMode != IndexMode.TIME_SERIES || getMetric().getValue() != TimeSeriesParams.MetricType.POSITION
134+
() -> indexSettings.getMode() != IndexMode.TIME_SERIES || getMetric().getValue() != TimeSeriesParams.MetricType.POSITION
140135
);
141136
addScriptValidation(script, indexed, hasDocValues);
142137

@@ -182,6 +177,11 @@ public Builder docValues(boolean hasDocValues) {
182177
return this;
183178
}
184179

180+
public Builder ignoreMalformed(boolean ignoreMalformed) {
181+
this.ignoreMalformed.setValue(new Explicit<>(ignoreMalformed, true));
182+
return this;
183+
}
184+
185185
private static GeoPoint parseNullValue(Object nullValue, boolean ignoreZValue, boolean ignoreMalformed) {
186186
if (nullValue == null) {
187187
return null;
@@ -224,7 +224,7 @@ public FieldMapper build(MapperBuilderContext context) {
224224
metric.get() != TimeSeriesParams.MetricType.POSITION,
225225
context.isSourceSynthetic() && ignoreMalformedEnabled
226226
);
227-
IndexType indexType = indexCreatedVersion.isLegacyIndexVersion()
227+
IndexType indexType = indexSettings.getIndexVersionCreated().isLegacyIndexVersion()
228228
? IndexType.archivedPoints()
229229
: IndexType.points(indexed.get(), hasDocValues.get());
230230
GeoPointFieldType ft = new GeoPointFieldType(
@@ -236,7 +236,7 @@ public FieldMapper build(MapperBuilderContext context) {
236236
scriptValues(),
237237
meta.get(),
238238
metric.get(),
239-
indexMode,
239+
indexSettings.getMode(),
240240
context.isSourceSynthetic()
241241
);
242242
hasScript = script.get() != null;
@@ -247,21 +247,15 @@ public FieldMapper build(MapperBuilderContext context) {
247247
}
248248

249249
public static final TypeParser PARSER = createTypeParserWithLegacySupport(
250-
(n, c) -> new Builder(
251-
n,
252-
c.scriptCompiler(),
253-
IGNORE_MALFORMED_SETTING.get(c.getSettings()),
254-
c.indexVersionCreated(),
255-
c.getIndexSettings().getMode()
256-
)
250+
(n, c) -> new Builder(n, c.scriptCompiler(), c.getIndexSettings())
257251
);
258252

253+
// TODO would be nicer not to hold onto the Builder here as it's a pretty big object
259254
private final Builder builder;
260255
private final FieldValues<GeoPoint> scriptValues;
261-
private final IndexVersion indexCreatedVersion;
262256
private final TimeSeriesParams.MetricType metricType;
263-
private final IndexMode indexMode;
264257
private final boolean indexed;
258+
private final IndexSettings indexSettings;
265259

266260
public GeoPointFieldMapper(
267261
String simpleName,
@@ -281,21 +275,14 @@ public GeoPointFieldMapper(
281275
);
282276
this.builder = builder;
283277
this.scriptValues = builder.scriptValues();
284-
this.indexCreatedVersion = builder.indexCreatedVersion;
285278
this.metricType = builder.metric.get();
286-
this.indexMode = builder.indexMode;
287279
this.indexed = builder.indexed.get();
280+
this.indexSettings = builder.indexSettings;
288281
}
289282

290283
@Override
291284
public FieldMapper.Builder getMergeBuilder() {
292-
return new Builder(
293-
leafName(),
294-
builder.scriptCompiler,
295-
builder.ignoreMalformed.getDefaultValue().value(),
296-
indexCreatedVersion,
297-
indexMode
298-
).init(this);
285+
return new Builder(leafName(), builder.scriptCompiler, indexSettings).init(this);
299286
}
300287

301288
@Override

0 commit comments

Comments
 (0)