Skip to content

Commit 5240ab8

Browse files
committed
Store full path in _ignored when ignoring dynamic array field (elastic#136315)
Currently, when a dynamic array field trips `index.mapping.total_fields. limit` and is ignored due to `index.mapping.total_fields. ignore_dynamic_beyond_limit`, the leaf name is stored in _ignored. This is inconsistent with single-valued fields where the full path is stored in _ignored. This PR updates the logic so that in both cases, the full path is stored.
1 parent 7a2dc32 commit 5240ab8

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

docs/changelog/136315.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 136315
2+
summary: Store full path in `_ignored` when ignoring dynamic array field
3+
area: Mapping
4+
type: bug
5+
issues: []

server/src/internalClusterTest/java/org/elasticsearch/index/mapper/DynamicMappingIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,14 @@ public void testIgnoreDynamicBeyondLimitObjectMultiField() {
374374
});
375375
}
376376

377+
public void testIgnoreDynamicBeyondLimitObjectArrayField() {
378+
indexIgnoreDynamicBeyond(2, orderedMap("a", orderedMap("b", 1, "c", List.of(2, 3, 4))), fields -> {
379+
assertThat(fields.keySet(), equalTo(Set.of("a.b", "_ignored")));
380+
assertThat(fields.get("a.b").getValues(), Matchers.contains(1L));
381+
assertThat(fields.get("_ignored").getValues(), Matchers.contains("a.c"));
382+
});
383+
}
384+
377385
public void testIgnoreDynamicBeyondLimitRuntimeFields() {
378386
indexIgnoreDynamicBeyond(1, orderedMap("field1", 1, "field2", List.of(1, 2)), Map.of("dynamic", "runtime"), fields -> {
379387
assertThat(fields.keySet(), equalTo(Set.of("field1", "_ignored")));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ private static void parseArrayDynamic(DocumentParserContext context, String curr
659659
throw new IllegalArgumentException("failed to parse field [" + currentFieldName + " ]", e);
660660
}
661661
}
662-
context.addIgnoredField(currentFieldName);
662+
context.addIgnoredField(context.path().pathAsText(currentFieldName));
663663
return;
664664
}
665665
parseNonDynamicArray(context, objectMapperFromTemplate, currentFieldName, currentFieldName);

0 commit comments

Comments
 (0)