diff --git a/docs/changelog/121715.yaml b/docs/changelog/121715.yaml new file mode 100644 index 0000000000000..837bae57b4c91 --- /dev/null +++ b/docs/changelog/121715.yaml @@ -0,0 +1,5 @@ +pr: 121715 +summary: Fix synthetic source issue with deeply nested ignored source fields +area: Mapping +type: bug +issues: [] diff --git a/muted-tests.yml b/muted-tests.yml index dd97eeae29796..b8d05b798d99e 100644 --- a/muted-tests.yml +++ b/muted-tests.yml @@ -521,3 +521,9 @@ tests: - class: org.elasticsearch.xpack.migrate.action.ReindexDatastreamIndexTransportActionIT method: testFailIfMetadataBlockSet issue: https://github.com/elastic/elasticsearch/issues/121774 +- class: org.elasticsearch.xpack.ml.packageloader.action.ModelLoaderUtilsTests + method: testSplitIntoRanges + issue: https://github.com/elastic/elasticsearch/issues/121799 +- class: org.elasticsearch.xpack.esql.heap_attack.HeapAttackIT + method: testLookupExplosionBigStringManyMatches + issue: https://github.com/elastic/elasticsearch/issues/121465 diff --git a/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java index 0a9028c480c1d..9656cb25e9f6c 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/ObjectMapper.java @@ -1130,7 +1130,7 @@ public boolean setIgnoredValues(Map { + b.startObject("top"); + b.startObject("properties"); + { + b.startObject("level1").startObject("properties"); + { + b.startObject("level2").startObject("properties"); + { + b.startObject("n") + .field("type", "integer") + .field("doc_values", "false") + .field("synthetic_source_keep", "all") + .endObject(); + } + b.endObject().endObject(); + } + b.endObject().endObject(); + } + b.endObject().endObject(); + })).documentMapper(); + + var syntheticSource = syntheticSource(documentMapper, b -> { + b.startObject("top").startObject("level1").startObject("level2").field("n", 25).endObject().endObject().endObject(); + }); + assertEquals("{\"top\":{\"level1\":{\"level2\":{\"n\":25}}}}", syntheticSource); + } + protected void validateRoundTripReader(String syntheticSource, DirectoryReader reader, DirectoryReader roundTripReader) throws IOException { // We exclude ignored source field since in some cases it contains an exact copy of a part of document source.