Skip to content

Commit ae04e66

Browse files
committed
iter
1 parent f854a8c commit ae04e66

File tree

3 files changed

+47
-42
lines changed

3 files changed

+47
-42
lines changed

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,8 @@ public static class Builder extends FieldMapper.Builder {
102102

103103
private final TextParams.Analyzers analyzers;
104104

105-
public Builder(String name, IndexAnalyzers indexAnalyzers) {
106-
this(name, IndexVersion.current(), indexAnalyzers);
107-
}
108-
109-
public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers indexAnalyzers) {
110-
super(name);
105+
public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers indexAnalyzers, boolean withinMultiField) {
106+
super(name, withinMultiField);
111107
this.indexCreatedVersion = indexCreatedVersion;
112108
this.analyzers = new TextParams.Analyzers(
113109
indexAnalyzers,
@@ -141,13 +137,15 @@ private MatchOnlyTextFieldType buildFieldType(MapperBuilderContext context) {
141137
public MatchOnlyTextFieldMapper build(MapperBuilderContext context) {
142138
MatchOnlyTextFieldType tft = buildFieldType(context);
143139
boolean storeSource = context.isSourceSynthetic()
144-
&& currentFieldIsAMultiField == false
140+
&& withinMultiField == false
145141
&& multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
146142
return new MatchOnlyTextFieldMapper(leafName(), Defaults.FIELD_TYPE, tft, builderParams(this, context), storeSource, this);
147143
}
148144
}
149145

150-
public static final TypeParser PARSER = new TypeParser((n, c) -> new Builder(n, c.indexVersionCreated(), c.getIndexAnalyzers()));
146+
public static final TypeParser PARSER = new TypeParser(
147+
(n, c) -> new Builder(n, c.indexVersionCreated(), c.getIndexAnalyzers(), c.isWithinMultiField())
148+
);
151149

152150
public static class MatchOnlyTextFieldType extends StringFieldType {
153151

@@ -402,6 +400,7 @@ private String storedFieldNameForSyntheticSource() {
402400
private final int positionIncrementGap;
403401
private final boolean storeSource;
404402
private final FieldType fieldType;
403+
private final boolean withinMultiField;
405404

406405
private MatchOnlyTextFieldMapper(
407406
String simpleName,
@@ -420,6 +419,7 @@ private MatchOnlyTextFieldMapper(
420419
this.indexAnalyzer = builder.analyzers.getIndexAnalyzer();
421420
this.positionIncrementGap = builder.analyzers.positionIncrementGap.getValue();
422421
this.storeSource = storeSource;
422+
this.withinMultiField = builder.isWithinMultiField();
423423
}
424424

425425
@Override
@@ -429,7 +429,7 @@ public Map<String, NamedAnalyzer> indexAnalyzers() {
429429

430430
@Override
431431
public FieldMapper.Builder getMergeBuilder() {
432-
return new Builder(leafName(), indexCreatedVersion, indexAnalyzers).init(this);
432+
return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, withinMultiField).init(this);
433433
}
434434

435435
@Override

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

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -83,33 +83,24 @@ public abstract class FieldMapper extends Mapper {
8383
static final Parameter<?>[] EMPTY_PARAMETERS = new Parameter[0];
8484

8585
/**
86-
* @param multiFields sub fields of this mapper
87-
* @param copyTo copyTo fields of this mapper
88-
* @param sourceKeepMode mode for storing the field source in synthetic source mode
89-
* @param hasScript whether a script is defined for the field
90-
* @param onScriptError the behaviour for when the defined script fails at runtime
91-
* @param currentFieldIsAMultiField whether current field is part of a multi-field definition
86+
* @param multiFields sub fields of this mapper
87+
* @param copyTo copyTo fields of this mapper
88+
* @param sourceKeepMode mode for storing the field source in synthetic source mode
89+
* @param hasScript whether a script is defined for the field
90+
* @param onScriptError the behaviour for when the defined script fails at runtime
9291
*/
9392
protected record BuilderParams(
9493
MultiFields multiFields,
9594
CopyTo copyTo,
9695
Optional<SourceKeepMode> sourceKeepMode,
9796
boolean hasScript,
98-
OnScriptError onScriptError,
99-
boolean currentFieldIsAMultiField
97+
OnScriptError onScriptError
10098
) {
10199
public static BuilderParams empty() {
102100
return empty;
103101
}
104102

105-
private static final BuilderParams empty = new BuilderParams(
106-
MultiFields.empty(),
107-
CopyTo.empty(),
108-
Optional.empty(),
109-
false,
110-
null,
111-
false
112-
);
103+
private static final BuilderParams empty = new BuilderParams(MultiFields.empty(), CopyTo.empty(), Optional.empty(), false, null);
113104
}
114105

115106
protected final MappedFieldType mappedFieldType;
@@ -611,7 +602,6 @@ public static class Builder {
611602
private boolean hasSyntheticSourceCompatibleKeywordField;
612603

613604
public Builder add(FieldMapper.Builder builder) {
614-
builder.currentFieldIsAMultiField = true;
615605
mapperBuilders.put(builder.leafName(), builder::build);
616606

617607
if (builder instanceof KeywordFieldMapper.Builder kwd) {
@@ -1394,20 +1384,24 @@ public abstract static class Builder extends Mapper.Builder implements ToXConten
13941384
protected Optional<SourceKeepMode> sourceKeepMode = Optional.empty();
13951385
protected boolean hasScript = false;
13961386
protected OnScriptError onScriptError = null;
1397-
protected boolean currentFieldIsAMultiField = false;
1387+
protected final boolean withinMultiField;
13981388

13991389
/**
14001390
* Creates a new Builder with a field name
14011391
*/
14021392
protected Builder(String name) {
1393+
this(name, false);
1394+
}
1395+
1396+
protected Builder(String name, boolean withinMultiField) {
14031397
super(name);
1398+
this.withinMultiField = withinMultiField;
14041399
}
14051400

14061401
/**
14071402
* Initialises all parameters from an existing mapper
14081403
*/
14091404
public Builder init(FieldMapper initializer) {
1410-
this.currentFieldIsAMultiField = initializer.builderParams.currentFieldIsAMultiField;
14111405
for (Parameter<?> param : getParameters()) {
14121406
param.init(initializer);
14131407
}
@@ -1423,14 +1417,7 @@ public Builder addMultiField(FieldMapper.Builder builder) {
14231417
}
14241418

14251419
protected BuilderParams builderParams(FieldMapper.Builder mainFieldBuilder, MapperBuilderContext context) {
1426-
return new BuilderParams(
1427-
multiFieldsBuilder.build(mainFieldBuilder, context),
1428-
copyTo,
1429-
sourceKeepMode,
1430-
hasScript,
1431-
onScriptError,
1432-
mainFieldBuilder.currentFieldIsAMultiField
1433-
);
1420+
return new BuilderParams(multiFieldsBuilder.build(mainFieldBuilder, context), copyTo, sourceKeepMode, hasScript, onScriptError);
14341421
}
14351422

14361423
protected void merge(FieldMapper in, Conflicts conflicts, MapperMergeContext mapperMergeContext) {
@@ -1452,6 +1439,10 @@ protected final void validate() {
14521439
}
14531440
}
14541441

1442+
public boolean isWithinMultiField() {
1443+
return withinMultiField;
1444+
}
1445+
14551446
/**
14561447
* @return the list of parameters defined for this mapper
14571448
*/

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

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,17 @@ public static class Builder extends FieldMapper.Builder {
288288
final TextParams.Analyzers analyzers;
289289

290290
public Builder(String name, IndexAnalyzers indexAnalyzers, boolean isSyntheticSourceEnabled) {
291-
this(name, IndexVersion.current(), indexAnalyzers, isSyntheticSourceEnabled);
291+
this(name, IndexVersion.current(), indexAnalyzers, isSyntheticSourceEnabled, false);
292292
}
293293

294-
public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers indexAnalyzers, boolean isSyntheticSourceEnabled) {
295-
super(name);
294+
public Builder(
295+
String name,
296+
IndexVersion indexCreatedVersion,
297+
IndexAnalyzers indexAnalyzers,
298+
boolean isSyntheticSourceEnabled,
299+
boolean withinMultiField
300+
) {
301+
super(name, withinMultiField);
296302

297303
// If synthetic source is used we need to either store this field
298304
// to recreate the source or use keyword multi-fields for that.
@@ -304,7 +310,7 @@ public Builder(String name, IndexVersion indexCreatedVersion, IndexAnalyzers ind
304310
this.store = Parameter.storeParam(
305311
m -> ((TextFieldMapper) m).store,
306312
() -> isSyntheticSourceEnabled
307-
&& currentFieldIsAMultiField == false
313+
&& this.withinMultiField == false
308314
&& multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false
309315
);
310316
this.indexCreatedVersion = indexCreatedVersion;
@@ -485,7 +491,13 @@ public TextFieldMapper build(MapperBuilderContext context) {
485491
}
486492

487493
public static final TypeParser PARSER = createTypeParserWithLegacySupport(
488-
(n, c) -> new Builder(n, c.indexVersionCreated(), c.getIndexAnalyzers(), SourceFieldMapper.isSynthetic(c.getIndexSettings()))
494+
(n, c) -> new Builder(
495+
n,
496+
c.indexVersionCreated(),
497+
c.getIndexAnalyzers(),
498+
SourceFieldMapper.isSynthetic(c.getIndexSettings()),
499+
c.isWithinMultiField()
500+
)
489501
);
490502

491503
private static class PhraseWrappedAnalyzer extends AnalyzerWrapper {
@@ -1307,6 +1319,7 @@ public Query existsQuery(SearchExecutionContext context) {
13071319
private final SubFieldInfo phraseFieldInfo;
13081320

13091321
private final boolean isSyntheticSourceEnabled;
1322+
private final boolean isWithinMultiField;
13101323

13111324
private TextFieldMapper(
13121325
String simpleName,
@@ -1340,6 +1353,7 @@ private TextFieldMapper(
13401353
this.freqFilter = builder.freqFilter.getValue();
13411354
this.fieldData = builder.fieldData.get();
13421355
this.isSyntheticSourceEnabled = builder.isSyntheticSourceEnabled;
1356+
this.isWithinMultiField = builder.withinMultiField;
13431357
}
13441358

13451359
@Override
@@ -1363,7 +1377,7 @@ public Map<String, NamedAnalyzer> indexAnalyzers() {
13631377

13641378
@Override
13651379
public FieldMapper.Builder getMergeBuilder() {
1366-
return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, isSyntheticSourceEnabled).init(this);
1380+
return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, isSyntheticSourceEnabled, isWithinMultiField).init(this);
13671381
}
13681382

13691383
@Override

0 commit comments

Comments
 (0)