Skip to content

Commit a9fe602

Browse files
Kubik42shmuelhanoch
authored andcommitted
Fixed inconsistency in the isSyntheticSourceEnabled flag (elastic#137297)
* Fixed inconsistency in the isSyntheticSourceEnabled flag * Update docs/changelog/137297.yaml
1 parent bb96d8d commit a9fe602

File tree

7 files changed

+26
-55
lines changed

7 files changed

+26
-55
lines changed

docs/changelog/137297.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 137297
2+
summary: Fixed inconsistency in the `isSyntheticSourceEnabled` flag
3+
area: Mapping
4+
type: bug
5+
issues: []

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

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public static class Defaults {
100100

101101
}
102102

103-
public static class Builder extends BuilderWithSyntheticSourceContext {
103+
public static class Builder extends TextFamilyBuilder {
104104

105105
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
106106

@@ -112,10 +112,9 @@ public Builder(
112112
IndexVersion indexCreatedVersion,
113113
IndexAnalyzers indexAnalyzers,
114114
boolean storedFieldInBinaryFormat,
115-
boolean isSyntheticSourceEnabled,
116115
boolean isWithinMultiField
117116
) {
118-
super(name, indexCreatedVersion, isSyntheticSourceEnabled, isWithinMultiField);
117+
super(name, indexCreatedVersion, isWithinMultiField);
119118
this.analyzers = new TextParams.Analyzers(
120119
indexAnalyzers,
121120
m -> ((MatchOnlyTextFieldMapper) m).indexAnalyzer,
@@ -169,7 +168,6 @@ private static boolean isSyntheticSourceStoredFieldInBinaryFormat(IndexVersion i
169168
n,
170169
c.indexVersionCreated(),
171170
c.getIndexAnalyzers(),
172-
isSyntheticSourceStoredFieldInBinaryFormat(c.indexVersionCreated()),
173171
SourceFieldMapper.isSynthetic(c.getIndexSettings()),
174172
c.isWithinMultiField()
175173
)
@@ -677,14 +675,8 @@ public Map<String, NamedAnalyzer> indexAnalyzers() {
677675

678676
@Override
679677
public FieldMapper.Builder getMergeBuilder() {
680-
return new Builder(
681-
leafName(),
682-
indexCreatedVersion,
683-
indexAnalyzers,
684-
storedFieldInBinaryFormat,
685-
fieldType().isSyntheticSourceEnabled(),
686-
fieldType().isWithinMultiField()
687-
).init(this);
678+
return new Builder(leafName(), indexCreatedVersion, indexAnalyzers, storedFieldInBinaryFormat, fieldType().isWithinMultiField())
679+
.init(this);
688680
}
689681

690682
@Override

plugins/mapper-annotated-text/src/main/java/org/elasticsearch/index/mapper/annotatedtext/AnnotatedTextFieldMapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ private static NamedAnalyzer wrapAnalyzer(NamedAnalyzer in) {
8181
);
8282
}
8383

84-
public static class Builder extends BuilderWithSyntheticSourceContext {
84+
public static class Builder extends TextFamilyBuilder {
8585

8686
final Parameter<SimilarityProvider> similarity = TextParams.similarity(m -> builder(m).similarity.getValue());
8787
final Parameter<String> indexOptions = TextParams.textIndexOptions(m -> builder(m).indexOptions.getValue());
@@ -100,7 +100,7 @@ public Builder(
100100
boolean isSyntheticSourceEnabled,
101101
boolean isWithinMultiField
102102
) {
103-
super(name, indexCreatedVersion, isSyntheticSourceEnabled, isWithinMultiField);
103+
super(name, indexCreatedVersion, isWithinMultiField);
104104
this.analyzers = new TextParams.Analyzers(
105105
indexAnalyzers,
106106
m -> builder(m).analyzers.getIndexAnalyzer(),
@@ -111,7 +111,7 @@ public Builder(
111111
if (TextFieldMapper.keywordMultiFieldsNotStoredWhenIgnoredIndexVersionCheck(indexCreatedVersion())) {
112112
return false;
113113
}
114-
return isSyntheticSourceEnabled() && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
114+
return isSyntheticSourceEnabled && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
115115
});
116116
}
117117

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,32 +1663,21 @@ protected boolean inheritDimensionParameterFromParentObject(MapperBuilderContext
16631663
/**
16641664
* Creates mappers for fields that require additional context for supporting synthetic source.
16651665
*/
1666-
public abstract static class BuilderWithSyntheticSourceContext extends Builder {
1666+
public abstract static class TextFamilyBuilder extends Builder {
16671667

16681668
private final IndexVersion indexCreatedVersion;
1669-
private final boolean isSyntheticSourceEnabled;
16701669
private final boolean isWithinMultiField;
16711670

1672-
protected BuilderWithSyntheticSourceContext(
1673-
String name,
1674-
IndexVersion indexCreatedVersion,
1675-
boolean isSyntheticSourceEnabled,
1676-
boolean isWithinMultiField
1677-
) {
1671+
protected TextFamilyBuilder(String name, IndexVersion indexCreatedVersion, boolean isWithinMultiField) {
16781672
super(name);
16791673
this.indexCreatedVersion = indexCreatedVersion;
1680-
this.isSyntheticSourceEnabled = isSyntheticSourceEnabled;
16811674
this.isWithinMultiField = isWithinMultiField;
16821675
}
16831676

16841677
public IndexVersion indexCreatedVersion() {
16851678
return indexCreatedVersion;
16861679
}
16871680

1688-
public boolean isSyntheticSourceEnabled() {
1689-
return isSyntheticSourceEnabled;
1690-
}
1691-
16921681
public boolean isWithinMultiField() {
16931682
return isWithinMultiField;
16941683
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,10 @@ public boolean isSynthetic() {
557557
return mode == Mode.SYNTHETIC;
558558
}
559559

560+
/**
561+
* Caution: this function is not aware of the legacy "mappings._source.mode" parameter that some legacy indices might use. You should
562+
* prefer to get information about synthetic source from {@link MapperBuilderContext}.
563+
*/
560564
public static boolean isSynthetic(IndexSettings indexSettings) {
561565
return IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.get(indexSettings.getSettings()) == SourceFieldMapper.Mode.SYNTHETIC;
562566
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ private static FielddataFrequencyFilter parseFrequencyFilter(String name, Mappin
238238
return new FielddataFrequencyFilter(minFrequency, maxFrequency, minSegmentSize);
239239
}
240240

241-
public static class Builder extends BuilderWithSyntheticSourceContext {
241+
public static class Builder extends TextFamilyBuilder {
242242

243243
private final Parameter<Boolean> store;
244244
private final Parameter<Boolean> norms;
@@ -301,7 +301,7 @@ public Builder(
301301
boolean isSyntheticSourceEnabled,
302302
boolean isWithinMultiField
303303
) {
304-
super(name, indexCreatedVersion, isSyntheticSourceEnabled, isWithinMultiField);
304+
super(name, indexCreatedVersion, isWithinMultiField);
305305

306306
this.indexMode = indexMode;
307307
this.analyzers = new TextParams.Analyzers(
@@ -409,7 +409,7 @@ private TextFieldType buildFieldType(
409409
index.getValue(),
410410
store.getValue(),
411411
tsi,
412-
isSyntheticSourceEnabled(),
412+
context.isSourceSynthetic(),
413413
isWithinMultiField(),
414414
SyntheticSourceHelper.syntheticSourceDelegate(fieldType.stored(), multiFields),
415415
meta.getValue(),

x-pack/plugin/logsdb/src/main/java/org/elasticsearch/xpack/logsdb/patterntext/PatternTextFieldMapper.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import org.elasticsearch.index.mapper.MapperBuilderContext;
3030
import org.elasticsearch.index.mapper.MapperParsingException;
3131
import org.elasticsearch.index.mapper.MappingParserContext;
32-
import org.elasticsearch.index.mapper.SourceFieldMapper;
3332
import org.elasticsearch.index.mapper.SourceLoader;
3433
import org.elasticsearch.index.mapper.StringStoredFieldFieldLoader;
3534
import org.elasticsearch.index.mapper.TextParams;
@@ -88,7 +87,7 @@ public static class Defaults {
8887
}
8988
}
9089

91-
public static class Builder extends BuilderWithSyntheticSourceContext {
90+
public static class Builder extends TextFamilyBuilder {
9291

9392
private final IndexSettings indexSettings;
9493
private final Parameter<Map<String, String>> meta = Parameter.metaParam();
@@ -97,23 +96,11 @@ public static class Builder extends BuilderWithSyntheticSourceContext {
9796
private final Parameter<Boolean> disableTemplating;
9897

9998
public Builder(String name, MappingParserContext context) {
100-
this(
101-
name,
102-
context.indexVersionCreated(),
103-
context.getIndexSettings(),
104-
SourceFieldMapper.isSynthetic(context.getIndexSettings()),
105-
context.isWithinMultiField()
106-
);
99+
this(name, context.indexVersionCreated(), context.getIndexSettings(), context.isWithinMultiField());
107100
}
108101

109-
public Builder(
110-
String name,
111-
IndexVersion indexCreatedVersion,
112-
IndexSettings indexSettings,
113-
boolean isSyntheticSourceEnabled,
114-
boolean isWithinMultiField
115-
) {
116-
super(name, indexCreatedVersion, isSyntheticSourceEnabled, isWithinMultiField);
102+
public Builder(String name, IndexVersion indexCreatedVersion, IndexSettings indexSettings, boolean isWithinMultiField) {
103+
super(name, indexCreatedVersion, isWithinMultiField);
117104
this.indexSettings = indexSettings;
118105
this.analyzer = analyzerParam(name, m -> ((PatternTextFieldMapper) m).analyzer);
119106
this.disableTemplating = disableTemplatingParameter(indexSettings);
@@ -249,13 +236,7 @@ public Map<String, NamedAnalyzer> indexAnalyzers() {
249236

250237
@Override
251238
public FieldMapper.Builder getMergeBuilder() {
252-
return new Builder(
253-
leafName(),
254-
indexCreatedVersion,
255-
indexSettings,
256-
fieldType().isSyntheticSourceEnabled(),
257-
fieldType().isWithinMultiField()
258-
).init(this);
239+
return new Builder(leafName(), indexCreatedVersion, indexSettings, fieldType().isWithinMultiField()).init(this);
259240
}
260241

261242
@Override

0 commit comments

Comments
 (0)