From b25d7b9471ddb5f861615ba75cd7aebd99ac0967 Mon Sep 17 00:00:00 2001 From: Kostas Krikellas <131142368+kkrik-es@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:13:53 +0300 Subject: [PATCH] Check prefixes when constructing synthetic source for flattened fields (#129580) * Check prefixes when constructing synthetic source for flattened fields * Update docs/changelog/129580.yaml --- docs/changelog/129580.yaml | 6 ++++++ .../FlattenedFieldSyntheticWriterHelper.java | 2 +- .../flattened/FlattenedFieldMapperTests.java | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 docs/changelog/129580.yaml diff --git a/docs/changelog/129580.yaml b/docs/changelog/129580.yaml new file mode 100644 index 000000000000..9af61d55208c --- /dev/null +++ b/docs/changelog/129580.yaml @@ -0,0 +1,6 @@ +pr: 129580 +summary: Check prefixes when constructing synthetic source for flattened fields +area: Mapping +type: bug +issues: + - 129508 diff --git a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldSyntheticWriterHelper.java b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldSyntheticWriterHelper.java index 53f68fb6edee..7929858a8e94 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldSyntheticWriterHelper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldSyntheticWriterHelper.java @@ -261,7 +261,7 @@ public class FlattenedFieldSyntheticWriterHelper { final List values ) throws IOException { startObject(b, startPrefix.prefix); - if (currKeyValue.suffix.equals(nextKeyValue.suffix) == false) { + if (currKeyValue.prefix.equals(nextKeyValue.prefix) == false || currKeyValue.suffix.equals(nextKeyValue.suffix) == false) { writeNestedObject(b, values, currKeyValue.suffix().suffix); } endObject(b, endPrefix.prefix); diff --git a/server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java b/server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java index 82dc0683fa98..77a463e78129 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapperTests.java @@ -851,6 +851,23 @@ public class FlattenedFieldMapperTests extends MapperTestCase { assertThat(syntheticSource, equalTo("{\"field\":{\"key1\":\"val1\",\"obj1\":{\"key2\":\"val2\",\"key3\":[\"val3\",\"val4\"]}}}")); } + public void testSyntheticSourceWithCommonLeafField() throws IOException { + DocumentMapper mapper = createSytheticSourceMapperService( + mapping(b -> { b.startObject("field").field("type", "flattened").endObject(); }) + ).documentMapper(); + + var syntheticSource = syntheticSource(mapper, b -> { + b.startObject("field"); + { + b.startObject("obj1").field("key", "foo").endObject(); + b.startObject("obj2").field("key", "bar").endObject(); + } + b.endObject(); + }); + assertThat(syntheticSource, equalTo(""" + {"field":{"obj1":{"key":"foo"},"obj2":{"key":"bar"}}}""")); + } + @Override protected boolean supportsCopyTo() { return false;