diff --git a/docs/changelog/137394.yaml b/docs/changelog/137394.yaml new file mode 100644 index 0000000000000..7e64987bc0e97 --- /dev/null +++ b/docs/changelog/137394.yaml @@ -0,0 +1,6 @@ +pr: 137394 +summary: Fix dropped ignore above fields +area: Mapping +type: bug +issues: + - 137360 diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java index bc7fec81c69d6..0c45ae66e744f 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/extras/MatchOnlyTextFieldMapper.java @@ -253,7 +253,8 @@ private IOFunction, IOExcepti String parentField = searchExecutionContext.parentPath(name()); var parent = searchExecutionContext.lookup().fieldType(parentField); - if (parent instanceof KeywordFieldMapper.KeywordFieldType keywordParent && keywordParent.ignoreAbove().isSet()) { + if (parent instanceof KeywordFieldMapper.KeywordFieldType keywordParent + && keywordParent.ignoreAbove().valuesPotentiallyIgnored()) { if (parent.isStored()) { return storedFieldFetcher(parentField, keywordParent.originalName()); } else if (parent.hasDocValues()) { @@ -274,7 +275,7 @@ private IOFunction, IOExcepti var kwd = textFieldType.syntheticSourceDelegate(); if (kwd != null) { - if (kwd.ignoreAbove().isSet()) { + if (kwd.ignoreAbove().valuesPotentiallyIgnored()) { if (kwd.isStored()) { return storedFieldFetcher(kwd.name(), kwd.originalName()); } else if (kwd.hasDocValues()) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java index b02aa7ba2a137..1bf2a57552b69 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java @@ -1326,7 +1326,7 @@ protected BytesRef preserve(BytesRef value) { } } - if (fieldType().ignoreAbove.isSet()) { + if (fieldType().ignoreAbove.valuesPotentiallyIgnored()) { layers.add(new CompositeSyntheticFieldLoader.StoredFieldLayer(originalName) { @Override protected void writeValue(Object value, XContentBuilder b) throws IOException { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/Mapper.java b/server/src/main/java/org/elasticsearch/index/mapper/Mapper.java index 1453d8fcb65a2..d4db320a15da2 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/Mapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/Mapper.java @@ -136,7 +136,7 @@ default boolean supportsVersion(IndexVersion indexCreatedVersion) { * This class models the ignore_above parameter in indices. */ public static final class IgnoreAbove { - + // We use Integer.MAX_VALUE to represent a no-op, accepting all values. public static final int IGNORE_ABOVE_DEFAULT_VALUE = Integer.MAX_VALUE; public static final int IGNORE_ABOVE_DEFAULT_VALUE_FOR_LOGSDB_INDICES = 8191; @@ -172,6 +172,15 @@ public boolean isSet() { return Integer.valueOf(get()).equals(defaultValue) == false; } + /** + * Returns whether values are potentially ignored, either by an explicitly configured ignore_above or by the default value. + */ + public boolean valuesPotentiallyIgnored() { + // We use Integer.MAX_VALUE to represent accepting all values. If the value is anything else, then either we have an + // explicitly configured ignore_above, or we have a non no-op default. + return get() != Integer.MAX_VALUE; + } + /** * Returns whether the given string will be ignored. */ diff --git a/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java index 70bf14c553be7..b515ff24bef81 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java @@ -1017,7 +1017,7 @@ public boolean isAggregatable() { * A delegate by definition must have doc_values or be stored so most of the time it can be used for loading. */ public boolean canUseSyntheticSourceDelegateForLoading() { - return syntheticSourceDelegate != null && syntheticSourceDelegate.ignoreAbove().isSet() == false; + return syntheticSourceDelegate != null && syntheticSourceDelegate.ignoreAbove().valuesPotentiallyIgnored() == false; } /** @@ -1025,7 +1025,7 @@ public boolean canUseSyntheticSourceDelegateForLoading() { */ public boolean canUseSyntheticSourceDelegateForQuerying() { return syntheticSourceDelegate != null - && syntheticSourceDelegate.ignoreAbove().isSet() == false + && syntheticSourceDelegate.ignoreAbove().valuesPotentiallyIgnored() == false && syntheticSourceDelegate.isIndexed(); } diff --git a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java index 9b818570ba543..2f28e00007778 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/flattened/FlattenedFieldMapper.java @@ -921,7 +921,7 @@ protected SyntheticSourceSupport syntheticSourceSupport() { () -> new FlattenedSortedSetDocValuesSyntheticFieldLoader( fullPath(), fullPath() + KEYED_FIELD_SUFFIX, - fieldType().ignoreAbove.isSet() ? fullPath() + KEYED_IGNORED_VALUES_FIELD_SUFFIX : null, + fieldType().ignoreAbove.valuesPotentiallyIgnored() ? fullPath() + KEYED_IGNORED_VALUES_FIELD_SUFFIX : null, leafName() ) ); diff --git a/server/src/test/java/org/elasticsearch/index/IgnoreAboveTests.java b/server/src/test/java/org/elasticsearch/index/IgnoreAboveTests.java index f43b0eb95683e..a96fb748873bd 100644 --- a/server/src/test/java/org/elasticsearch/index/IgnoreAboveTests.java +++ b/server/src/test/java/org/elasticsearch/index/IgnoreAboveTests.java @@ -25,6 +25,7 @@ public void test_ignore_above_with_value_and_index_mode_and_index_version() { // when/then assertEquals(123, ignoreAbove.get()); assertTrue(ignoreAbove.isSet()); + assertTrue(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_with_value_only() { @@ -34,6 +35,7 @@ public void test_ignore_above_with_value_only() { // when/then assertEquals(123, ignoreAbove.get()); assertTrue(ignoreAbove.isSet()); + assertTrue(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_with_null_value_should_throw() { @@ -52,6 +54,7 @@ public void test_ignore_above_with_null_value() { // when/then assertEquals(Mapper.IgnoreAbove.IGNORE_ABOVE_DEFAULT_VALUE, ignoreAbove.get()); assertFalse(ignoreAbove.isSet()); + assertFalse(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_with_null_value_and_logsdb_index_mode() { @@ -61,6 +64,7 @@ public void test_ignore_above_with_null_value_and_logsdb_index_mode() { // when/then assertEquals(Mapper.IgnoreAbove.IGNORE_ABOVE_DEFAULT_VALUE_FOR_LOGSDB_INDICES, ignoreAbove.get()); assertFalse(ignoreAbove.isSet()); + assertTrue(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_with_null_everything() { @@ -70,6 +74,7 @@ public void test_ignore_above_with_null_everything() { // when/then assertEquals(Mapper.IgnoreAbove.IGNORE_ABOVE_DEFAULT_VALUE, ignoreAbove.get()); assertFalse(ignoreAbove.isSet()); + assertFalse(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_default_for_standard_indices() { @@ -79,6 +84,7 @@ public void test_ignore_above_default_for_standard_indices() { // when/then assertEquals(Mapper.IgnoreAbove.IGNORE_ABOVE_DEFAULT_VALUE, ignoreAbove.get()); assertFalse(ignoreAbove.isSet()); + assertFalse(ignoreAbove.valuesPotentiallyIgnored()); } public void test_ignore_above_default_for_logsdb_indices() { @@ -88,6 +94,7 @@ public void test_ignore_above_default_for_logsdb_indices() { // when/then assertEquals(Mapper.IgnoreAbove.IGNORE_ABOVE_DEFAULT_VALUE_FOR_LOGSDB_INDICES, ignoreAbove.get()); assertFalse(ignoreAbove.isSet()); + assertTrue(ignoreAbove.valuesPotentiallyIgnored()); } public void test_string_isIgnored() { diff --git a/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_logs_tests.yml b/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_logs_tests.yml index e438d1e353cc5..4e4fa5ba2e174 100644 --- a/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_logs_tests.yml +++ b/x-pack/plugin/otel-data/src/yamlRestTest/resources/rest-api-spec/test/20_logs_tests.yml @@ -72,6 +72,193 @@ setup: - match: { hits.hits.0.fields.error\.exception\.message: ["foo"] } - match: { hits.hits.0.fields.error\.stack_trace: ["Exception in thread \"main\" java.lang.RuntimeException: Test exception\n at com.example.GenerateTrace.methodB(GenerateTrace.java:13)\n at com.example.GenerateTrace.methodA(GenerateTrace.java:9)\n at com.example.GenerateTrace.main(GenerateTrace.java:5)"] } --- +"Long stacktrace": + - do: + bulk: + index: logs-generic.otel-default + refresh: true + body: + - create: { } + - "@timestamp": 2024-07-18T14:48:33.467654000Z + resource: + attributes: + service.name: my-service + attributes: + exception.stacktrace: |- + Exception in thread "main" java.lang.RuntimeException: Simulated deep stacktrace for testing + at com.example.project.moduleA.ClassA.methodA(ClassA.java:10) + at com.example.project.moduleA.ClassA.methodB(ClassA.java:15) + at com.example.project.moduleB.ClassB.methodC(ClassB.java:22) + at com.example.project.moduleB.ClassB.methodD(ClassB.java:27) + at com.example.project.moduleC.ClassC.methodE(ClassC.java:34) + at com.example.project.moduleC.ClassC.methodF(ClassC.java:39) + at com.example.project.moduleD.ClassD.methodG(ClassD.java:46) + at com.example.project.moduleD.ClassD.methodH(ClassD.java:51) + at com.example.project.moduleE.ClassE.methodI(ClassE.java:58) + at com.example.project.moduleE.ClassE.methodJ(ClassE.java:63) + at com.example.project.moduleF.ClassF.methodK(ClassF.java:70) + at com.example.project.moduleF.ClassF.methodL(ClassF.java:75) + at com.example.project.moduleG.ClassG.methodM(ClassG.java:82) + at com.example.project.moduleG.ClassG.methodN(ClassG.java:87) + at com.example.project.moduleH.ClassH.methodO(ClassH.java:94) + at com.example.project.moduleH.ClassH.methodP(ClassH.java:99) + at com.example.project.moduleI.ClassI.methodQ(ClassI.java:106) + at com.example.project.moduleI.ClassI.methodR(ClassI.java:111) + at com.example.project.moduleJ.ClassJ.methodS(ClassJ.java:118) + at com.example.project.moduleJ.ClassJ.methodT(ClassJ.java:123) + at com.example.project.moduleK.ClassK.methodU(ClassK.java:130) + at com.example.project.moduleK.ClassK.methodV(ClassK.java:135) + at com.example.project.moduleL.ClassL.methodW(ClassL.java:142) + at com.example.project.moduleL.ClassL.methodX(ClassL.java:147) + at com.example.project.moduleM.ClassM.methodY(ClassM.java:154) + at com.example.project.moduleM.ClassM.methodZ(ClassM.java:159) + at com.example.project.moduleN.ClassN.methodAA(ClassN.java:166) + at com.example.project.moduleN.ClassN.methodAB(ClassN.java:171) + at com.example.project.moduleO.ClassO.methodAC(ClassO.java:178) + at com.example.project.moduleO.ClassO.methodAD(ClassO.java:183) + at com.example.project.moduleP.ClassP.methodAE(ClassP.java:190) + at com.example.project.moduleP.ClassP.methodAF(ClassP.java:195) + at com.example.project.moduleQ.ClassQ.methodAG(ClassQ.java:202) + at com.example.project.moduleQ.ClassQ.methodAH(ClassQ.java:207) + at com.example.project.moduleR.ClassR.methodAI(ClassR.java:214) + at com.example.project.moduleR.ClassR.methodAJ(ClassR.java:219) + at com.example.project.moduleS.ClassS.methodAK(ClassS.java:226) + at com.example.project.moduleS.ClassS.methodAL(ClassS.java:231) + at com.example.project.moduleT.ClassT.methodAM(ClassT.java:238) + at com.example.project.moduleT.ClassT.methodAN(ClassT.java:243) + at com.example.project.moduleU.ClassU.methodAO(ClassU.java:250) + at com.example.project.moduleU.ClassU.methodAP(ClassU.java:255) + at com.example.project.moduleV.ClassV.methodAQ(ClassV.java:262) + at com.example.project.moduleV.ClassV.methodAR(ClassV.java:267) + at com.example.project.moduleW.ClassW.methodAS(ClassW.java:274) + at com.example.project.moduleW.ClassW.methodAT(ClassW.java:279) + at com.example.project.moduleX.ClassX.methodAU(ClassX.java:286) + at com.example.project.moduleX.ClassX.methodAV(ClassX.java:291) + at com.example.project.moduleY.ClassY.methodAW(ClassY.java:298) + at com.example.project.moduleY.ClassY.methodAX(ClassY.java:303) + at com.example.project.moduleZ.ClassZ.methodAY(ClassZ.java:310) + at com.example.project.moduleZ.ClassZ.methodAZ(ClassZ.java:315) + at com.example.project.moduleAA.ClassAA.methodBA(ClassAA.java:322) + at com.example.project.moduleAA.ClassAA.methodBB(ClassAA.java:327) + at com.example.project.moduleAB.ClassAB.methodBC(ClassAB.java:334) + at com.example.project.moduleAB.ClassAB.methodBD(ClassAB.java:339) + at com.example.project.moduleAC.ClassAC.methodBE(ClassAC.java:346) + at com.example.project.moduleAC.ClassAC.methodBF(ClassAC.java:351) + at com.example.project.moduleAD.ClassAD.methodBG(ClassAD.java:358) + at com.example.project.moduleAD.ClassAD.methodBH(ClassAD.java:363) + at com.example.project.moduleAE.ClassAE.methodBI(ClassAE.java:370) + at com.example.project.moduleAE.ClassAE.methodBJ(ClassAE.java:375) + at com.example.project.moduleAF.ClassAF.methodBK(ClassAF.java:382) + at com.example.project.moduleAF.ClassAF.methodBL(ClassAF.java:387) + at com.example.project.moduleAG.ClassAG.methodBM(ClassAG.java:394) + at com.example.project.moduleAG.ClassAG.methodBN(ClassAG.java:399) + at com.example.project.moduleAH.ClassAH.methodBO(ClassAH.java:406) + at com.example.project.moduleAH.ClassAH.methodBP(ClassAH.java:411) + at com.example.project.moduleAI.ClassAI.methodBQ(ClassAI.java:418) + at com.example.project.moduleAI.ClassAI.methodBR(ClassAI.java:423) + at com.example.project.moduleAJ.ClassAJ.methodBS(ClassAJ.java:430) + at com.example.project.moduleAJ.ClassAJ.methodBT(ClassAJ.java:435) + at com.example.project.moduleAK.ClassAK.methodBU(ClassAK.java:442) + at com.example.project.moduleAK.ClassAK.methodBV(ClassAK.java:447) + at com.example.project.moduleAL.ClassAL.methodBW(ClassAL.java:454) + at com.example.project.moduleAL.ClassAL.methodBX(ClassAL.java:459) + at com.example.project.moduleAM.ClassAM.methodBY(ClassAM.java:466) + at com.example.project.moduleAM.ClassAM.methodBZ(ClassAM.java:471) + at com.example.project.Main.main(Main.java:478) + Caused by: java.lang.IllegalArgumentException: Invalid argument encountered + at com.example.project.util.Validator.check(Validator.java:55) + at com.example.project.moduleA.ClassA.methodA(ClassA.java:8) + at com.example.project.moduleA.ClassA.methodB(ClassA.java:15) + at com.example.project.moduleB.ClassB.methodC(ClassB.java:22) + at com.example.project.moduleB.ClassB.methodD(ClassB.java:27) + at com.example.project.moduleC.ClassC.methodE(ClassC.java:34) + at com.example.project.moduleC.ClassC.methodF(ClassC.java:39) + at com.example.project.moduleD.ClassD.methodG(ClassD.java:46) + at com.example.project.moduleD.ClassD.methodH(ClassD.java:51) + at com.example.project.moduleE.ClassE.methodI(ClassE.java:58) + at com.example.project.moduleE.ClassE.methodJ(ClassE.java:63) + at com.example.project.moduleF.ClassF.methodK(ClassF.java:70) + at com.example.project.moduleF.ClassF.methodL(ClassF.java:75) + at com.example.project.moduleG.ClassG.methodM(ClassG.java:82) + at com.example.project.moduleG.ClassG.methodN(ClassG.java:87) + at com.example.project.moduleH.ClassH.methodO(ClassH.java:94) + at com.example.project.moduleH.ClassH.methodP(ClassH.java:99) + at com.example.project.moduleI.ClassI.methodQ(ClassI.java:106) + at com.example.project.moduleI.ClassI.methodR(ClassI.java:111) + at com.example.project.moduleJ.ClassJ.methodS(ClassJ.java:118) + at com.example.project.moduleJ.ClassJ.methodT(ClassJ.java:123) + at com.example.project.moduleK.ClassK.methodU(ClassK.java:130) + at com.example.project.moduleK.ClassK.methodV(ClassK.java:135) + at com.example.project.moduleL.ClassL.methodW(ClassL.java:142) + at com.example.project.moduleL.ClassL.methodX(ClassL.java:147) + at com.example.project.moduleM.ClassM.methodY(ClassM.java:154) + at com.example.project.moduleM.ClassM.methodZ(ClassM.java:159) + at com.example.project.moduleN.ClassN.methodAA(ClassN.java:166) + at com.example.project.moduleN.ClassN.methodAB(ClassN.java:171) + at com.example.project.moduleO.ClassO.methodAC(ClassO.java:178) + at com.example.project.moduleO.ClassO.methodAD(ClassO.java:183) + at com.example.project.moduleP.ClassP.methodAE(ClassP.java:190) + at com.example.project.moduleP.ClassP.methodAF(ClassP.java:195) + at com.example.project.moduleQ.ClassQ.methodAG(ClassQ.java:202) + at com.example.project.moduleQ.ClassQ.methodAH(ClassQ.java:207) + at com.example.project.moduleR.ClassR.methodAI(ClassR.java:214) + at com.example.project.moduleR.ClassR.methodAJ(ClassR.java:219) + at com.example.project.moduleS.ClassS.methodAK(ClassS.java:226) + at com.example.project.moduleS.ClassS.methodAL(ClassS.java:231) + at com.example.project.moduleT.ClassT.methodAM(ClassT.java:238) + at com.example.project.moduleT.ClassT.methodAN(ClassT.java:243) + at com.example.project.moduleU.ClassU.methodAO(ClassU.java:250) + at com.example.project.moduleU.ClassU.methodAP(ClassU.java:255) + at com.example.project.moduleV.ClassV.methodAQ(ClassV.java:262) + at com.example.project.moduleV.ClassV.methodAR(ClassV.java:267) + at com.example.project.moduleW.ClassW.methodAS(ClassW.java:274) + at com.example.project.moduleW.ClassW.methodAT(ClassW.java:279) + at com.example.project.moduleX.ClassX.methodAU(ClassX.java:286) + at com.example.project.moduleX.ClassX.methodAV(ClassX.java:291) + at com.example.project.moduleY.ClassY.methodAW(ClassY.java:298) + at com.example.project.moduleY.ClassY.methodAX(ClassY.java:303) + at com.example.project.moduleZ.ClassZ.methodAY(ClassZ.java:310) + at com.example.project.moduleZ.ClassZ.methodAZ(ClassZ.java:315) + at com.example.project.moduleAA.ClassAA.methodBA(ClassAA.java:322) + at com.example.project.moduleAA.ClassAA.methodBB(ClassAA.java:327) + at com.example.project.moduleAB.ClassAB.methodBC(ClassAB.java:334) + at com.example.project.moduleAB.ClassAB.methodBD(ClassAB.java:339) + at com.example.project.moduleAC.ClassAC.methodBE(ClassAC.java:346) + at com.example.project.moduleAC.ClassAC.methodBF(ClassAC.java:351) + at com.example.project.moduleAD.ClassAD.methodBG(ClassAD.java:358) + at com.example.project.moduleAD.ClassAD.methodBH(ClassAD.java:363) + at com.example.project.moduleAE.ClassAE.methodBI(ClassAE.java:370) + at com.example.project.moduleAE.ClassAE.methodBJ(ClassAE.java:375) + at com.example.project.moduleAF.ClassAF.methodBK(ClassAF.java:382) + at com.example.project.moduleAF.ClassAF.methodBL(ClassAF.java:387) + at com.example.project.moduleAG.ClassAG.methodBM(ClassAG.java:394) + at com.example.project.moduleAG.ClassAG.methodBN(ClassAG.java:399) + at com.example.project.moduleAH.ClassAH.methodBO(ClassAH.java:406) + at com.example.project.moduleAH.ClassAH.methodBP(ClassAH.java:411) + at com.example.project.moduleAI.ClassAI.methodBQ(ClassAI.java:418) + at com.example.project.moduleAI.ClassAI.methodBR(ClassAI.java:423) + at com.example.project.moduleAJ.ClassAJ.methodBS(ClassAJ.java:430) + at com.example.project.moduleAJ.ClassAJ.methodBT(ClassAJ.java:435) + at com.example.project.moduleAK.ClassAK.methodBU(ClassAK.java:442) + at com.example.project.moduleAK.ClassAK.methodBV(ClassAK.java:447) + at com.example.project.moduleAL.ClassAL.methodBW(ClassAL.java:454) + at com.example.project.moduleAL.ClassAL.methodBX(ClassAL.java:459) + at com.example.project.moduleAM.ClassAM.methodBY(ClassAM.java:466) + at com.example.project.moduleAM.ClassAM.methodBZ(ClassAM.java:471) + ... 58 more + Caused by: java.lang.NullPointerException: Null value found + at com.example.project.util.Validator.requireNonNull(Validator.java:60) + at com.example.project.util.Validator.check(Validator.java:53) + ... 77 more + + - is_false: errors + - do: + search: + index: logs-generic.otel-default + - length: { hits.hits: 1 } + - exists: hits.hits.0._source.attributes.exception\.stacktrace + - exists: hits.hits.0._ignored +--- "resource.attributes.host.name @timestamp should be used as sort fields": - do: bulk: diff --git a/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java b/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java index fd91e90adcd4f..1281fa5c1fcfd 100644 --- a/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java +++ b/x-pack/plugin/wildcard/src/main/java/org/elasticsearch/xpack/wildcard/mapper/WildcardFieldMapper.java @@ -1110,7 +1110,7 @@ protected SyntheticSourceSupport syntheticSourceSupport() { return new SyntheticSourceSupport.Native(() -> { var layers = new ArrayList(); layers.add(new WildcardSyntheticFieldLoader()); - if (ignoreAbove.isSet()) { + if (ignoreAbove.valuesPotentiallyIgnored()) { layers.add(new CompositeSyntheticFieldLoader.StoredFieldLayer(originalName()) { @Override protected void writeValue(Object value, XContentBuilder b) throws IOException {