Skip to content

Commit bc00b12

Browse files
authored
[8.19] Fix broken bwc logic in text field mapper introduced by #129126 (#129308) (#129323)
* Fix broken bwc logic in text field mapper introduced by #129126 (#129308) A missing condition in the bwc logic caused a text field to be a stored, while before #129126, this wasn't the case. * fix test compile errors
1 parent 2af75cf commit bc00b12

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ public Builder(
316316
&& this.withinMultiField == false
317317
&& multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
318318
} else {
319-
return isSyntheticSourceEnabled;
319+
return isSyntheticSourceEnabled && multiFieldsBuilder.hasSyntheticSourceCompatibleKeywordField() == false;
320320
}
321321
});
322322
this.indexCreatedVersion = indexCreatedVersion;

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

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.elasticsearch.index.IndexMode;
5252
import org.elasticsearch.index.IndexSettings;
5353
import org.elasticsearch.index.IndexVersion;
54+
import org.elasticsearch.index.IndexVersions;
5455
import org.elasticsearch.index.analysis.AnalyzerScope;
5556
import org.elasticsearch.index.analysis.CharFilterFactory;
5657
import org.elasticsearch.index.analysis.CustomAnalyzer;
@@ -350,6 +351,31 @@ public void testStoreParameterDefaultsSyntheticSourceWithKeywordMultiField() thr
350351
assertThat(fieldType.stored(), is(false));
351352
}
352353

354+
public void testStoreParameterDefaultsSyntheticSourceWithKeywordMultiFieldBwc() throws IOException {
355+
var indexSettingsBuilder = getIndexSettingsBuilder();
356+
indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
357+
var indexSettings = indexSettingsBuilder.build();
358+
359+
var mapping = mapping(b -> {
360+
b.startObject("name");
361+
b.field("type", "text");
362+
b.startObject("fields");
363+
b.startObject("keyword");
364+
b.field("type", "keyword");
365+
b.endObject();
366+
b.endObject();
367+
b.endObject();
368+
});
369+
IndexVersion beforeVersion = IndexVersions.INDEX_INT_SORT_INT_TYPE_8_19;
370+
DocumentMapper mapper = createMapperService(beforeVersion, indexSettings, mapping).documentMapper();
371+
372+
var source = source(b -> b.field("name", "quick brown fox"));
373+
ParsedDocument doc = mapper.parse(source);
374+
List<IndexableField> fields = doc.rootDoc().getFields("name");
375+
IndexableFieldType fieldType = fields.get(0).fieldType();
376+
assertThat(fieldType.stored(), is(false));
377+
}
378+
353379
public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiField() throws IOException {
354380
var indexSettingsBuilder = getIndexSettingsBuilder();
355381
indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
@@ -374,6 +400,31 @@ public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiField() thr
374400
assertThat(fieldType.stored(), is(false));
375401
}
376402

403+
public void testStoreParameterDefaultsSyntheticSourceTextFieldIsMultiFieldBwc() throws IOException {
404+
var indexSettingsBuilder = getIndexSettingsBuilder();
405+
indexSettingsBuilder.put(IndexSettings.INDEX_MAPPER_SOURCE_MODE_SETTING.getKey(), "synthetic");
406+
var indexSettings = indexSettingsBuilder.build();
407+
408+
var mapping = mapping(b -> {
409+
b.startObject("name");
410+
b.field("type", "keyword");
411+
b.startObject("fields");
412+
b.startObject("text");
413+
b.field("type", "text");
414+
b.endObject();
415+
b.endObject();
416+
b.endObject();
417+
});
418+
IndexVersion beforeVersion = IndexVersions.INDEX_INT_SORT_INT_TYPE_8_19;
419+
DocumentMapper mapper = createMapperService(beforeVersion, indexSettings, mapping).documentMapper();
420+
421+
var source = source(b -> b.field("name", "quick brown fox"));
422+
ParsedDocument doc = mapper.parse(source);
423+
List<IndexableField> fields = doc.rootDoc().getFields("name.text");
424+
IndexableFieldType fieldType = fields.get(0).fieldType();
425+
assertThat(fieldType.stored(), is(true));
426+
}
427+
377428
public void testBWCSerialization() throws IOException {
378429
MapperService mapperService = createMapperService(fieldMapping(b -> {
379430
b.field("type", "text");

0 commit comments

Comments
 (0)