diff --git a/docs/changelog/135479.yaml b/docs/changelog/135479.yaml new file mode 100644 index 0000000000000..fa6f5ea620550 --- /dev/null +++ b/docs/changelog/135479.yaml @@ -0,0 +1,6 @@ +pr: 135479 +summary: Correctly apply field path to JSON processor when adding contents to document + root +area: Ingest Node +type: bug +issues: [] diff --git a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/JsonProcessor.java b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/JsonProcessor.java index 47e7d5846d592..a3bd97e153edc 100644 --- a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/JsonProcessor.java +++ b/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/JsonProcessor.java @@ -149,6 +149,10 @@ public static void apply( boolean strictJsonParsing ) { Object value = apply(ctx.get(fieldName), allowDuplicateKeys, strictJsonParsing); + mergeParsedJson(ctx, value, conflictStrategy); + } + + private static void mergeParsedJson(Map ctx, Object value, ConflictStrategy conflictStrategy) { if (value instanceof Map) { @SuppressWarnings("unchecked") Map map = (Map) value; @@ -184,10 +188,11 @@ public static void recursiveMerge(Map target, Map subfield = new HashMap<>(); + subfield.put("b", json); + + Map document = new HashMap<>(); + document.put("a", subfield); + document.put("c", "see"); + + IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), document); + ingestDocument = IngestPipelineTestUtils.runWithRandomAccessPattern(ingestDocument, jsonProcessor); + + Map sourceAndMetadata = ingestDocument.getSourceAndMetadata(); + assertEquals(1, sourceAndMetadata.get("a")); + assertEquals(2, sourceAndMetadata.get("b")); + assertEquals("see", sourceAndMetadata.get("c")); + } + public void testDuplicateKeys() throws Exception { String processorTag = randomAlphaOfLength(3); JsonProcessor lenientJsonProcessor = new JsonProcessor(processorTag, null, "a", null, true, REPLACE, true);