Skip to content

Commit cf269d8

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 2864324 commit cf269d8

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
@@ -382,6 +382,14 @@ public void testIgnoreDynamicBeyondLimitObjectMultiField() {
382382
});
383383
}
384384

385+
public void testIgnoreDynamicBeyondLimitObjectArrayField() {
386+
indexIgnoreDynamicBeyond(2, orderedMap("a", orderedMap("b", 1, "c", List.of(2, 3, 4))), fields -> {
387+
assertThat(fields.keySet(), equalTo(Set.of("a.b", "_ignored")));
388+
assertThat(fields.get("a.b").getValues(), Matchers.contains(1L));
389+
assertThat(fields.get("_ignored").getValues(), Matchers.contains("a.c"));
390+
});
391+
}
392+
385393
public void testIgnoreDynamicBeyondLimitRuntimeFields() {
386394
indexIgnoreDynamicBeyond(1, orderedMap("field1", 1, "field2", List.of(1, 2)), Map.of("dynamic", "runtime"), fields -> {
387395
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)