Skip to content

Commit 8c7b54a

Browse files
authored
Ensure all JSON field types are available for lookup. (#41914)
Previously, if multiple `embedded_json` fields were added at once, only the last one would be registered with `FieldTypeLookup`. This bug was uncovered when trying out different scenarios for performance benchmarking.
1 parent ab7d3b6 commit 8c7b54a

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public FieldTypeLookup copyAndAddAll(String type,
8686
}
8787

8888
if (fieldMapper instanceof JsonFieldMapper) {
89-
jsonMappers = fullNameToJsonMapper.copyAndPut(fieldName, (JsonFieldMapper) fieldMapper);
89+
jsonMappers = jsonMappers.copyAndPut(fieldName, (JsonFieldMapper) fieldMapper);
9090
}
9191
}
9292

server/src/test/java/org/elasticsearch/index/mapper/FieldTypeLookupTests.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,26 @@ public void testJsonFieldType() {
167167
assertEquals(objectKey, keyedFieldType.key());
168168
}
169169

170+
public void testMultipleJsonFieldTypes() {
171+
String field1 = "object1.object2.field";
172+
String field2 = "object1.field";
173+
String field3 = "object2.field";
174+
175+
JsonFieldMapper mapper1 = createJsonMapper(field1);
176+
JsonFieldMapper mapper2 = createJsonMapper(field2);
177+
JsonFieldMapper mapper3 = createJsonMapper(field3);
178+
179+
FieldTypeLookup lookup = new FieldTypeLookup()
180+
.copyAndAddAll("type", newList(mapper1, mapper2), emptyList());
181+
assertNotNull(lookup.get(field1 + ".some.key"));
182+
assertNotNull(lookup.get(field2 + ".some.key"));
183+
184+
lookup = lookup.copyAndAddAll("type", newList(mapper3), emptyList());
185+
assertNotNull(lookup.get(field1 + ".some.key"));
186+
assertNotNull(lookup.get(field2 + ".some.key"));
187+
assertNotNull(lookup.get(field3 + ".some.key"));
188+
}
189+
170190
public void testJsonFieldTypeWithAlias() {
171191
String fieldName = "object1.object2.field";
172192
JsonFieldMapper mapper = createJsonMapper(fieldName);

0 commit comments

Comments
 (0)