@@ -1201,85 +1201,166 @@ public void testDynamicStrictAllowTemplatesValue() throws Exception {
12011201 }
12021202
12031203 public void testDynamicValueWithUnmapFieldsBeyondTotalLimit () throws Exception {
1204- Settings settings = Settings .builder ()
1205- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1206- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1207- .build ();
1208- DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1209- b .field ("dynamic" , "true" );
1210- b .startObject ("properties" );
1211- {
1212- b .startObject ("foo" );
1213- b .field ("type" , "keyword" );
1214- b .endObject ();
1215- b .startObject ("bar" );
1216- b .field ("type" , "keyword" );
1217- b .endObject ();
1218- b .startObject ("zoo" );
1219- b .field ("type" , "keyword" );
1204+ {
1205+ Settings settings = Settings .builder ()
1206+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1207+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1208+ .build ();
1209+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1210+ b .field ("dynamic" , "true" );
1211+ b .startObject ("properties" );
1212+ {
1213+ b .startObject ("foo" );
1214+ b .field ("type" , "keyword" );
1215+ b .endObject ();
1216+ b .startObject ("bar" );
1217+ b .field ("type" , "keyword" );
1218+ b .endObject ();
1219+ b .startObject ("zoo" );
1220+ b .field ("type" , "keyword" );
1221+ b .endObject ();
1222+ }
12201223 b .endObject ();
12211224 }
1222- b .endObject ();
1225+
1226+ ), settings );
1227+
1228+ ParsedDocument doc = mapper .parse (source (b -> b .field ("test1" , "baz" )));
1229+ assertEquals (0 , doc .rootDoc ().getFields ("test1" ).length );
12231230 }
12241231
1225- ), settings );
1232+ {
1233+ Settings settings = Settings .builder ()
1234+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1235+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1236+ .build ();
1237+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1238+ b .field ("dynamic" , "true" );
1239+ b .startObject ("properties" );
1240+ {
1241+ b .startObject ("foo" );
1242+ b .field ("type" , "keyword" );
1243+ b .endObject ();
1244+ b .startObject ("bar" );
1245+ b .field ("type" , "keyword" );
1246+ b .endObject ();
1247+ }
1248+ b .endObject ();
1249+ }
12261250
1227- ParsedDocument doc = mapper .parse (source (b -> b .field ("test1" , "baz" )));
1228- assertEquals (0 , doc .rootDoc ().getFields ("test1" ).length );
1251+ ), settings );
1252+
1253+ // Add a string type field will add two fields into the mapping(text+keyword), so the field `test`
1254+ // will not be added to the mapping because of the total fields limit
1255+ ParsedDocument doc = mapper .parse (source (b -> b .field ("test" , "baz" )));
1256+ assertEquals (0 , doc .rootDoc ().getFields ("test" ).length );
1257+ }
12291258 }
12301259
12311260 public void testDynamicLongArrayWithUnmapFieldsBeyondTotalLimit () throws Exception {
1232- Settings settings = Settings .builder ()
1233- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1234- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1235- .build ();
1236- DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1237- b .field ("dynamic" , "true" );
1238- b .startObject ("properties" );
1239- {
1240- b .startObject ("foo" );
1241- b .field ("type" , "keyword" );
1242- b .endObject ();
1243- b .startObject ("bar" );
1244- b .field ("type" , "keyword" );
1261+ {
1262+ Settings settings = Settings .builder ()
1263+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1264+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1265+ .build ();
1266+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1267+ b .field ("dynamic" , "true" );
1268+ b .startObject ("properties" );
1269+ {
1270+ b .startObject ("foo" );
1271+ b .field ("type" , "keyword" );
1272+ b .endObject ();
1273+ b .startObject ("bar" );
1274+ b .field ("type" , "keyword" );
1275+ b .endObject ();
1276+ b .startObject ("zoo" );
1277+ b .field ("type" , "keyword" );
1278+ b .endObject ();
1279+ }
12451280 b .endObject ();
1246- b .startObject ("zoo" );
1247- b .field ("type" , "keyword" );
1281+ }), settings );
1282+
1283+ ParsedDocument doc = mapper .parse (source (b -> b .startArray ("test" ).value (0 ).value (1 ).endArray ()));
1284+ assertEquals (0 , doc .rootDoc ().getFields ("test" ).length );
1285+ }
1286+
1287+ {
1288+ Settings settings = Settings .builder ()
1289+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1290+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1291+ .build ();
1292+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1293+ b .field ("dynamic" , "true" );
1294+ b .startObject ("properties" );
1295+ {
1296+ b .startObject ("foo" );
1297+ b .field ("type" , "keyword" );
1298+ b .endObject ();
1299+ b .startObject ("bar" );
1300+ b .field ("type" , "keyword" );
1301+ b .endObject ();
1302+ }
12481303 b .endObject ();
1249- }
1250- b .endObject ();
1251- }), settings );
1304+ }), settings );
12521305
1253- ParsedDocument doc = mapper .parse (source (b -> b .startArray ("test" ).value (0 ).value (1 ).endArray ()));
1254- assertEquals (0 , doc .rootDoc ().getFields ("test" ).length );
1306+ ParsedDocument doc = mapper .parse (source (b -> b .startArray ("test" ).value (0 ).value (1 ).endArray ()));
1307+ assertEquals (2 , doc .rootDoc ().getFields ("test" ).length );
1308+ }
12551309 }
12561310
12571311 public void testDynamicObjectWithUnmapFieldsBeyondTotalLimit () throws Exception {
1258- Settings settings = Settings .builder ()
1259- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1260- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1261- .build ();
1262- DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1263- b .field ("dynamic" , "true" );
1264- b .startObject ("properties" );
1265- {
1266- b .startObject ("foo" );
1267- b .field ("type" , "keyword" );
1268- b .endObject ();
1269- b .startObject ("bar" );
1270- b .field ("type" , "keyword" );
1271- b .endObject ();
1272- b .startObject ("zoo" );
1273- b .field ("type" , "keyword" );
1312+ {
1313+ Settings settings = Settings .builder ()
1314+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1315+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1316+ .build ();
1317+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1318+ b .field ("dynamic" , "true" );
1319+ b .startObject ("properties" );
1320+ {
1321+ b .startObject ("foo" );
1322+ b .field ("type" , "keyword" );
1323+ b .endObject ();
1324+ b .startObject ("bar" );
1325+ b .field ("type" , "keyword" );
1326+ b .endObject ();
1327+ b .startObject ("zoo" );
1328+ b .field ("type" , "keyword" );
1329+ b .endObject ();
1330+ }
12741331 b .endObject ();
12751332 }
1276- b .endObject ();
1333+
1334+ ), settings );
1335+
1336+ ParsedDocument doc = mapper .parse (source (b -> b .startObject ("test" ).field ("test1" , "baz" ).endObject ()));
1337+ assertEquals (0 , doc .rootDoc ().getFields ("test.test1" ).length );
12771338 }
12781339
1279- ), settings );
1340+ {
1341+ Settings settings = Settings .builder ()
1342+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1343+ .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1344+ .build ();
1345+ DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1346+ b .field ("dynamic" , "true" );
1347+ b .startObject ("properties" );
1348+ {
1349+ b .startObject ("foo" );
1350+ b .field ("type" , "keyword" );
1351+ b .endObject ();
1352+ b .startObject ("bar" );
1353+ b .field ("type" , "keyword" );
1354+ b .endObject ();
1355+ }
1356+ b .endObject ();
1357+ }
12801358
1281- ParsedDocument doc = mapper .parse (source (b -> b .startObject ("test" ).field ("test1" , "baz" ).endObject ()));
1282- assertEquals (0 , doc .rootDoc ().getFields ("test.test1" ).length );
1359+ ), settings );
1360+
1361+ ParsedDocument doc = mapper .parse (source (b -> b .startObject ("test" ).field ("test1" , "baz" ).endObject ()));
1362+ assertEquals (0 , doc .rootDoc ().getFields ("test.test1" ).length );
1363+ }
12831364 }
12841365
12851366 public void testDynamicStrictAllowTemplatesValueWithUnmapFieldsBeyondTotalLimit () throws Exception {
@@ -1408,33 +1489,6 @@ public void testDynamicStrictAllowTemplatesObjectWithUnmapFieldsBeyondTotalLimit
14081489 assertEquals (0 , doc .rootDoc ().getFields ("test.test1" ).length );
14091490 }
14101491
1411- public void testCannotAddNewFieldWithUnmapFieldsBeyondTotalLimit () throws Exception {
1412- Settings settings = Settings .builder ()
1413- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_LIMIT_SETTING .getKey (), 3 )
1414- .put (MapperService .INDEX_MAPPING_TOTAL_FIELDS_UNMAP_FIELDS_BEYONGD_LIMIT_SETTING .getKey (), true )
1415- .build ();
1416- DocumentMapper mapper = createDocumentMapper (topMapping (b -> {
1417- b .field ("dynamic" , "true" );
1418- b .startObject ("properties" );
1419- {
1420- b .startObject ("foo" );
1421- b .field ("type" , "keyword" );
1422- b .endObject ();
1423- b .startObject ("bar" );
1424- b .field ("type" , "keyword" );
1425- b .endObject ();
1426- }
1427- b .endObject ();
1428- }
1429-
1430- ), settings );
1431-
1432- // Add a string type field will add two fields into the mapping(text+keyword), so the field `test`
1433- // will not be added to the mapping because of the total fields limit
1434- ParsedDocument doc = mapper .parse (source (b -> b .field ("test" , "baz" )));
1435- assertEquals (0 , doc .rootDoc ().getFields ("test" ).length );
1436- }
1437-
14381492 public void testDynamicStrictAllowTemplatesNull () throws Exception {
14391493 DocumentMapper mapper = createDocumentMapper (topMapping (b -> b .field ("dynamic" , "strict_allow_templates" )));
14401494 StrictDynamicMappingException exception = expectThrows (
0 commit comments