From 8c9ccccdb74de1cd8722b0d63f64b664f36d863f Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Tue, 24 Aug 2021 13:39:32 -0400 Subject: [PATCH 01/12] Add matching pattern to error in fields This adds the pattern into the error message returned when trying to fetch fields. So this: ``` POST _search { "fields": [ { "field": "*", "format": "date_time" } ] } ``` Will return an error message like ``` error fetching [foo] which matches [*]: [keyword] doesn't support formats ``` It also centralizes the code adding the `error fetching [foo]` bit of the error message so we don't have to be super duper careful to make sure the field name comes back. --- .../index/mapper/RankFeatureFieldMapper.java | 2 +- .../join/mapper/ParentJoinFieldMapper.java | 2 +- .../ICUCollationKeywordFieldMapper.java | 2 +- .../test/search/330_fetch_fields.yml | 115 ++++++++++++++++++ .../index/mapper/DocCountFieldMapper.java | 2 +- .../index/mapper/IpFieldMapper.java | 2 +- .../index/mapper/KeywordFieldMapper.java | 2 +- .../index/mapper/NumberFieldMapper.java | 2 +- .../index/mapper/SourceValueFetcher.java | 4 +- .../flattened/FlattenedFieldMapper.java | 3 +- .../search/fetch/subphase/FieldFetcher.java | 13 +- .../index/mapper/KeywordFieldTypeTests.java | 2 +- .../KeyedFlattenedFieldTypeTests.java | 2 +- .../mapper/DataTierFieldMapper.java | 2 +- .../AggregateDoubleMetricFieldMapper.java | 2 +- .../mapper/ConstantKeywordFieldMapper.java | 2 +- .../unsignedlong/UnsignedLongFieldMapper.java | 2 +- .../mapper/DenseVectorFieldMapper.java | 2 +- .../wildcard/mapper/WildcardFieldMapper.java | 2 +- 19 files changed, 144 insertions(+), 21 deletions(-) diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java index f67cd6b80a175..22ac12cc1d331 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java @@ -104,7 +104,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context) { @Override diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java index a2368c37357e5..0199362ee3e11 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java @@ -151,7 +151,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return SourceValueFetcher.identity(name(), context, format); } diff --git a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java index b66e56d7e0d56..9eedb5340bacb 100644 --- a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java +++ b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java @@ -73,7 +73,7 @@ public String typeName() { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValue) { diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml index 70f40c413adf0..d89c47ab54bf1 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml @@ -855,6 +855,7 @@ Test nested field with sibling field resolving to DocValueFetcher: - match: { hits.hits.0.fields.number.2 : 3 } - match: { hits.hits.0.fields.number.3 : 5 } - match: { hits.hits.0.fields.number.4 : 6 } + --- Test token_count inside nested field doesn't fail: - skip: @@ -892,3 +893,117 @@ Test token_count inside nested field doesn't fail: body: _source: false fields: [ "*" ] + +--- +error includes field name: + - skip: + version: ' - 7.99.99' + reason: 'error changed in 8.0.0 to be backported to 7.15' + + - do: + indices.create: + index: test + body: + settings: + index.number_of_shards: 1 + mappings: + properties: + keyword: + type: keyword + date: + type: date + + - do: + index: + index: test + id: 1 + refresh: true + body: + keyword: "value" + date: "1990-12-29T22:30:00.000Z" + + - do: + catch: '/error fetching \[keyword\]: \[keyword\] doesn''t support formats./' + search: + index: test + body: + fields: + - field: keyword + format: "yyyy/MM/dd" + +--- +error includes glob pattern: + - skip: + version: ' - 7.99.99' + reason: 'error changed in 8.0.0 to be backported to 7.15' + + - do: + indices.create: + index: test + body: + settings: + index.number_of_shards: 1 + mappings: + properties: + dkeyword: + type: keyword + date: + type: date + + - do: + index: + index: test + id: 1 + refresh: true + body: + dkeyword: "value" + date: "1990-12-29T22:30:00.000Z" + + - do: + catch: '/error fetching \[dkeyword\] which matched \[d\*\]: \[keyword\] doesn''t support formats./' + search: + index: test + body: + fields: + - field: d* + format: "yyyy/MM/dd" + + +--- +error for flattened includes whole path: + - skip: + version: ' - 7.99.99' + reason: 'error changed in 8.0.0 to be backported to 7.15' + + - do: + indices.create: + index: test + body: + settings: + index.number_of_shards: 1 + mappings: + properties: + flattened: + type: flattened + + date: + type: date + + - do: + index: + index: test + id: 1 + refresh: true + body: + flattened: + foo: bar + date: "1990-12-29T22:30:00.000Z" + + - do: + catch: '/error fetching \[flattened.bar\]: \[flattened\] doesn''t support formats./' + search: + index: test + body: + fields: + - field: flattened.bar + format: "yyyy/MM/dd" diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java index 14d1a0ee9336b..f7f1baf4332a0 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java @@ -57,7 +57,7 @@ public Query termQuery(Object value, SearchExecutionContext context) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, DEFAULT_VALUE) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index a95556a13bf87..f9f8f0f199234 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -195,7 +195,7 @@ private static InetAddress parse(Object value) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } if (scriptValues != null) { return FieldValues.valueFetcher(scriptValues, v -> InetAddresses.toAddrString((InetAddress)v), context); 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 1a3db9d4f96d5..3d2866ba1f1e0 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java @@ -352,7 +352,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } if (this.scriptValues != null) { return FieldValues.valueFetcher(this.scriptValues, context); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java index e66f829c9cfc9..77200733b17ec 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java @@ -1042,7 +1042,7 @@ public Object valueForDisplay(Object value) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } if (this.scriptValues != null) { return FieldValues.valueFetcher(this.scriptValues, context); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java b/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java index b23ae682c14ca..0e1b1fa9f4d45 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java @@ -101,7 +101,7 @@ public List fetchValues(SourceLookup lookup) { */ public static SourceValueFetcher identity(String fieldName, SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + fieldName + "] doesn't support formats."); + throw new IllegalArgumentException("Field doesn't support formats."); } return new SourceValueFetcher(fieldName, context) { @Override @@ -116,7 +116,7 @@ protected Object parseSourceValue(Object value) { */ public static SourceValueFetcher toString(String fieldName, SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + fieldName + "] doesn't support formats."); + throw new IllegalArgumentException("Field doesn't support formats."); } return new SourceValueFetcher(fieldName, context) { @Override 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 a67719a8f79f5..c5b6b6ea037be 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 @@ -306,8 +306,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + rootName + "." + key + "] of type [" + typeName() + - "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return SourceValueFetcher.identity(rootName + "." + key, context, format); } diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java index 9f39a2d9a3877..29e63083a839a 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java @@ -92,8 +92,17 @@ private static FieldFetcher create(SearchExecutionContext context, } // only add concrete fields if they are not beneath a known nested field if (nestedParentPath == null) { - ValueFetcher valueFetcher = ft.valueFetcher(context, fieldAndFormat.format); - fieldContexts.put(field, new FieldContext(field, valueFetcher)); + try { + ValueFetcher valueFetcher = ft.valueFetcher(context, fieldAndFormat.format); + fieldContexts.put(field, new FieldContext(field, valueFetcher)); + } catch (IllegalArgumentException e) { + StringBuilder error = new StringBuilder("error fetching [").append(field).append(']'); + if (isWildcardPattern) { + error.append(" which matched [").append(fieldAndFormat.field).append(']'); + } + error.append(": ").append(e.getMessage()); + throw new IllegalArgumentException(error.toString(), e); + } } } } diff --git a/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java index 6e50cfa9f5a11..b14dfc2727868 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java @@ -175,7 +175,7 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of("true"), fetchSourceValue(mapper, true)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(mapper, "value", "format")); - assertEquals("Field [field] of type [keyword] doesn't support formats.", e.getMessage()); + assertEquals("[keyword] doesn't support formats.", e.getMessage()); MappedFieldType ignoreAboveMapper = new KeywordFieldMapper.Builder("field") .ignoreAbove(4) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java index a9e7c77f32c00..40b1cbd4bad14 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java @@ -183,6 +183,6 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of(), fetcher.fetchValues(lookup)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> ft.valueFetcher(searchExecutionContext, "format")); - assertEquals("Field [field.key] of type [flattened] doesn't support formats.", e.getMessage()); + assertEquals("[flattened] doesn't support formats.", e.getMessage()); } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java index 45da755e63fd2..9ba98d64382e0 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java @@ -74,7 +74,7 @@ public Query existsQuery(SearchExecutionContext context) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } String tierPreference = getTierPreference(context); diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java index 8c428794d5d41..54dc87600bcd3 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java @@ -447,7 +447,7 @@ public BucketedSort newBucketedSort( @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context) { diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java index ec4b86a1928d1..c0b8f2946f71a 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java @@ -137,7 +137,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return value == null diff --git a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java index 22acedcbd49a1..399e8641c0650 100644 --- a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java +++ b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java @@ -241,7 +241,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValueFormatted) { diff --git a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java index 3b0c5585ebc2a..93ee9596673b1 100644 --- a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java +++ b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java @@ -115,7 +115,7 @@ public String typeName() { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new ArraySourceValueFetcher(name(), context) { @Override 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 4cf488c790e2b..6cc3051485ffc 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 @@ -892,7 +892,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValue) { From e3ed1356592ced36b87015601938ca813ac5ca21 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 25 Aug 2021 08:52:18 -0400 Subject: [PATCH 02/12] More tests --- .../java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java | 2 +- .../xpack/versionfield/VersionStringFieldTypeTests.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java index e3a3cab7a0ab4..d842ae654074a 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java @@ -29,6 +29,6 @@ public void testFetchSourceValue() throws IOException { IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(fieldType, parentValue, "format")); - assertEquals("Field [field] of type [join] doesn't support formats.", e.getMessage()); + assertEquals("[join] doesn't support formats.", e.getMessage()); } } diff --git a/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java b/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java index 22f2028313fa4..2579fc38cc483 100644 --- a/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java +++ b/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java @@ -23,6 +23,6 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of("true"), fetchSourceValue(mapper, true)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(mapper, "value", "format")); - assertEquals("Field [field] doesn't support formats.", e.getMessage()); + assertEquals("Field doesn't support formats.", e.getMessage()); } } From 78b1cbaeb47fe39b4d57ea8906fa189b872c97c1 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Thu, 26 Aug 2021 09:24:14 -0400 Subject: [PATCH 03/12] update skip --- x-pack/qa/runtime-fields/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index f7698ae96a964..5413d08e1aca2 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -80,6 +80,9 @@ subprojects { 'search.aggregation/20_terms/Global ordinals are loaded with the global_ordinals execution hint', 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', + // The error messages are different + 'search/330_fetch_fields/error includes field name', + 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') } From e9e05eae12ef42f5f8fe175b45b7f0a04e72726e Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 30 Aug 2021 16:50:00 -0400 Subject: [PATCH 04/12] Revert "update skip" This reverts commit 78b1cbaeb47fe39b4d57ea8906fa189b872c97c1. --- x-pack/qa/runtime-fields/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index 5413d08e1aca2..f7698ae96a964 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -80,9 +80,6 @@ subprojects { 'search.aggregation/20_terms/Global ordinals are loaded with the global_ordinals execution hint', 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', - // The error messages are different - 'search/330_fetch_fields/error includes field name', - 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') } From 3dfc5cec0c33458a9e014a20b1ded456741acae3 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 30 Aug 2021 16:52:39 -0400 Subject: [PATCH 05/12] Revert --- .../elasticsearch/index/mapper/RankFeatureFieldMapper.java | 2 +- .../org/elasticsearch/join/mapper/ParentJoinFieldMapper.java | 2 +- .../index/mapper/ICUCollationKeywordFieldMapper.java | 2 +- .../org/elasticsearch/index/mapper/DocCountFieldMapper.java | 2 +- .../java/org/elasticsearch/index/mapper/IpFieldMapper.java | 2 +- .../org/elasticsearch/index/mapper/KeywordFieldMapper.java | 2 +- .../org/elasticsearch/index/mapper/NumberFieldMapper.java | 2 +- .../org/elasticsearch/index/mapper/SourceValueFetcher.java | 4 ++-- .../index/mapper/flattened/FlattenedFieldMapper.java | 3 ++- .../org/elasticsearch/index/mapper/KeywordFieldTypeTests.java | 2 +- .../index/mapper/flattened/KeyedFlattenedFieldTypeTests.java | 2 +- .../routing/allocation/mapper/DataTierFieldMapper.java | 2 +- .../mapper/AggregateDoubleMetricFieldMapper.java | 2 +- .../constantkeyword/mapper/ConstantKeywordFieldMapper.java | 2 +- .../xpack/unsignedlong/UnsignedLongFieldMapper.java | 2 +- .../xpack/vectors/mapper/DenseVectorFieldMapper.java | 2 +- .../xpack/wildcard/mapper/WildcardFieldMapper.java | 2 +- 17 files changed, 19 insertions(+), 18 deletions(-) diff --git a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java index 22ac12cc1d331..f67cd6b80a175 100644 --- a/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java +++ b/modules/mapper-extras/src/main/java/org/elasticsearch/index/mapper/RankFeatureFieldMapper.java @@ -104,7 +104,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context) { @Override diff --git a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java index 0199362ee3e11..a2368c37357e5 100644 --- a/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java +++ b/modules/parent-join/src/main/java/org/elasticsearch/join/mapper/ParentJoinFieldMapper.java @@ -151,7 +151,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return SourceValueFetcher.identity(name(), context, format); } diff --git a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java index 9eedb5340bacb..b66e56d7e0d56 100644 --- a/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java +++ b/plugins/analysis-icu/src/main/java/org/elasticsearch/index/mapper/ICUCollationKeywordFieldMapper.java @@ -73,7 +73,7 @@ public String typeName() { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValue) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java index f7f1baf4332a0..14d1a0ee9336b 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/DocCountFieldMapper.java @@ -57,7 +57,7 @@ public Query termQuery(Object value, SearchExecutionContext context) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, DEFAULT_VALUE) { diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index f9f8f0f199234..a95556a13bf87 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -195,7 +195,7 @@ private static InetAddress parse(Object value) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } if (scriptValues != null) { return FieldValues.valueFetcher(scriptValues, v -> InetAddresses.toAddrString((InetAddress)v), context); 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 3d2866ba1f1e0..1a3db9d4f96d5 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/KeywordFieldMapper.java @@ -352,7 +352,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } if (this.scriptValues != null) { return FieldValues.valueFetcher(this.scriptValues, context); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java index 77200733b17ec..e66f829c9cfc9 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/NumberFieldMapper.java @@ -1042,7 +1042,7 @@ public Object valueForDisplay(Object value) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } if (this.scriptValues != null) { return FieldValues.valueFetcher(this.scriptValues, context); diff --git a/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java b/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java index 0e1b1fa9f4d45..b23ae682c14ca 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/SourceValueFetcher.java @@ -101,7 +101,7 @@ public List fetchValues(SourceLookup lookup) { */ public static SourceValueFetcher identity(String fieldName, SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field doesn't support formats."); + throw new IllegalArgumentException("Field [" + fieldName + "] doesn't support formats."); } return new SourceValueFetcher(fieldName, context) { @Override @@ -116,7 +116,7 @@ protected Object parseSourceValue(Object value) { */ public static SourceValueFetcher toString(String fieldName, SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("Field doesn't support formats."); + throw new IllegalArgumentException("Field [" + fieldName + "] doesn't support formats."); } return new SourceValueFetcher(fieldName, context) { @Override 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 c5b6b6ea037be..a67719a8f79f5 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 @@ -306,7 +306,8 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + rootName + "." + key + "] of type [" + typeName() + + "] doesn't support formats."); } return SourceValueFetcher.identity(rootName + "." + key, context, format); } diff --git a/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java index b14dfc2727868..6e50cfa9f5a11 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/KeywordFieldTypeTests.java @@ -175,7 +175,7 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of("true"), fetchSourceValue(mapper, true)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(mapper, "value", "format")); - assertEquals("[keyword] doesn't support formats.", e.getMessage()); + assertEquals("Field [field] of type [keyword] doesn't support formats.", e.getMessage()); MappedFieldType ignoreAboveMapper = new KeywordFieldMapper.Builder("field") .ignoreAbove(4) diff --git a/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java b/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java index 40b1cbd4bad14..a9e7c77f32c00 100644 --- a/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java +++ b/server/src/test/java/org/elasticsearch/index/mapper/flattened/KeyedFlattenedFieldTypeTests.java @@ -183,6 +183,6 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of(), fetcher.fetchValues(lookup)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> ft.valueFetcher(searchExecutionContext, "format")); - assertEquals("[flattened] doesn't support formats.", e.getMessage()); + assertEquals("Field [field.key] of type [flattened] doesn't support formats.", e.getMessage()); } } diff --git a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java index 9ba98d64382e0..45da755e63fd2 100644 --- a/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java +++ b/x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/cluster/routing/allocation/mapper/DataTierFieldMapper.java @@ -74,7 +74,7 @@ public Query existsQuery(SearchExecutionContext context) { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } String tierPreference = getTierPreference(context); diff --git a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java index 54dc87600bcd3..8c428794d5d41 100644 --- a/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java +++ b/x-pack/plugin/mapper-aggregate-metric/src/main/java/org/elasticsearch/xpack/aggregatemetric/mapper/AggregateDoubleMetricFieldMapper.java @@ -447,7 +447,7 @@ public BucketedSort newBucketedSort( @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context) { diff --git a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java index c0b8f2946f71a..ec4b86a1928d1 100644 --- a/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java +++ b/x-pack/plugin/mapper-constant-keyword/src/main/java/org/elasticsearch/xpack/constantkeyword/mapper/ConstantKeywordFieldMapper.java @@ -137,7 +137,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return value == null diff --git a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java index 399e8641c0650..22acedcbd49a1 100644 --- a/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java +++ b/x-pack/plugin/mapper-unsigned-long/src/main/java/org/elasticsearch/xpack/unsignedlong/UnsignedLongFieldMapper.java @@ -241,7 +241,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValueFormatted) { diff --git a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java index 93ee9596673b1..3b0c5585ebc2a 100644 --- a/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java +++ b/x-pack/plugin/vectors/src/main/java/org/elasticsearch/xpack/vectors/mapper/DenseVectorFieldMapper.java @@ -115,7 +115,7 @@ public String typeName() { @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new ArraySourceValueFetcher(name(), context) { @Override 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 6cc3051485ffc..4cf488c790e2b 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 @@ -892,7 +892,7 @@ public IndexFieldData.Builder fielddataBuilder(String fullyQualifiedIndexName, S @Override public ValueFetcher valueFetcher(SearchExecutionContext context, String format) { if (format != null) { - throw new IllegalArgumentException("[" + typeName() + "] doesn't support formats."); + throw new IllegalArgumentException("Field [" + name() + "] of type [" + typeName() + "] doesn't support formats."); } return new SourceValueFetcher(name(), context, nullValue) { From 830f0c1fbabd1227d7a22cdbd861cffcbb13e669 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 30 Aug 2021 16:59:44 -0400 Subject: [PATCH 06/12] Updates --- .../rest-api-spec/test/search/330_fetch_fields.yml | 6 +++--- .../elasticsearch/search/fetch/subphase/FieldFetcher.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml index d89c47ab54bf1..eea9df2a5de8c 100644 --- a/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml +++ b/rest-api-spec/src/yamlRestTest/resources/rest-api-spec/test/search/330_fetch_fields.yml @@ -923,7 +923,7 @@ error includes field name: date: "1990-12-29T22:30:00.000Z" - do: - catch: '/error fetching \[keyword\]: \[keyword\] doesn''t support formats./' + catch: '/error fetching \[keyword\]: Field \[keyword\] of type \[keyword\] doesn''t support formats./' search: index: test body: @@ -960,7 +960,7 @@ error includes glob pattern: date: "1990-12-29T22:30:00.000Z" - do: - catch: '/error fetching \[dkeyword\] which matched \[d\*\]: \[keyword\] doesn''t support formats./' + catch: '/error fetching \[dkeyword\] which matched \[d\*\]: Field \[dkeyword\] of type \[keyword\] doesn''t support formats./' search: index: test body: @@ -1000,7 +1000,7 @@ error for flattened includes whole path: date: "1990-12-29T22:30:00.000Z" - do: - catch: '/error fetching \[flattened.bar\]: \[flattened\] doesn''t support formats./' + catch: '/error fetching \[flattened.bar\]: Field \[flattened.bar\] of type \[flattened\] doesn''t support formats./' search: index: test body: diff --git a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java index 29e63083a839a..62fafa7f0caf7 100644 --- a/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java +++ b/server/src/main/java/org/elasticsearch/search/fetch/subphase/FieldFetcher.java @@ -92,9 +92,9 @@ private static FieldFetcher create(SearchExecutionContext context, } // only add concrete fields if they are not beneath a known nested field if (nestedParentPath == null) { + ValueFetcher valueFetcher; try { - ValueFetcher valueFetcher = ft.valueFetcher(context, fieldAndFormat.format); - fieldContexts.put(field, new FieldContext(field, valueFetcher)); + valueFetcher = ft.valueFetcher(context, fieldAndFormat.format); } catch (IllegalArgumentException e) { StringBuilder error = new StringBuilder("error fetching [").append(field).append(']'); if (isWildcardPattern) { @@ -103,6 +103,7 @@ private static FieldFetcher create(SearchExecutionContext context, error.append(": ").append(e.getMessage()); throw new IllegalArgumentException(error.toString(), e); } + fieldContexts.put(field, new FieldContext(field, valueFetcher)); } } } From 0f15553ef744081243a3e927687677d7542fd50a Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 30 Aug 2021 17:00:19 -0400 Subject: [PATCH 07/12] Revert more --- .../java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java index d842ae654074a..e3a3cab7a0ab4 100644 --- a/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java +++ b/modules/parent-join/src/test/java/org/elasticsearch/join/mapper/JoinFieldTypeTests.java @@ -29,6 +29,6 @@ public void testFetchSourceValue() throws IOException { IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(fieldType, parentValue, "format")); - assertEquals("[join] doesn't support formats.", e.getMessage()); + assertEquals("Field [field] of type [join] doesn't support formats.", e.getMessage()); } } From d65037c9657c0e93f6409d4301df869beed463f0 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Mon, 30 Aug 2021 17:00:54 -0400 Subject: [PATCH 08/12] More revert --- .../xpack/versionfield/VersionStringFieldTypeTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java b/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java index 2579fc38cc483..22f2028313fa4 100644 --- a/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java +++ b/x-pack/plugin/mapper-version/src/test/java/org/elasticsearch/xpack/versionfield/VersionStringFieldTypeTests.java @@ -23,6 +23,6 @@ public void testFetchSourceValue() throws IOException { assertEquals(List.of("true"), fetchSourceValue(mapper, true)); IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> fetchSourceValue(mapper, "value", "format")); - assertEquals("Field doesn't support formats.", e.getMessage()); + assertEquals("Field [field] doesn't support formats.", e.getMessage()); } } From 10c8ef5a726f669846839f8516b80e09e7a66096 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Tue, 31 Aug 2021 14:11:25 -0400 Subject: [PATCH 09/12] Revert "Revert "update skip"" This reverts commit e9e05eae12ef42f5f8fe175b45b7f0a04e72726e. --- x-pack/qa/runtime-fields/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index e5f5c228e6e4a..d984bdc79629e 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -80,6 +80,9 @@ subprojects { 'search.aggregation/20_terms/Global ordinals are loaded with the global_ordinals execution hint', 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', + // The error messages are different + 'search/330_fetch_fields/error includes field name', + 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') } From be7c84b7869163e61045e18b8766aba8d6899999 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 1 Sep 2021 09:15:22 -0400 Subject: [PATCH 10/12] check --- x-pack/qa/runtime-fields/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index d984bdc79629e..a2a6290234d09 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -81,8 +81,8 @@ subprojects { 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', // The error messages are different - 'search/330_fetch_fields/error includes field name', - 'search/330_fetch_fields/error includes glob pattern', + // 'search/330_fetch_fields/error includes field name', + // 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') } From 8b98a9b9c8442ad21c31196936e3d47b17cab812 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 1 Sep 2021 09:53:57 -0400 Subject: [PATCH 11/12] These work now! --- x-pack/qa/runtime-fields/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index a2a6290234d09..e5f5c228e6e4a 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -80,9 +80,6 @@ subprojects { 'search.aggregation/20_terms/Global ordinals are loaded with the global_ordinals execution hint', 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', - // The error messages are different - // 'search/330_fetch_fields/error includes field name', - // 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') } From 06f448ff80444369592b5027d453c186fb1e9ed8 Mon Sep 17 00:00:00 2001 From: Nik Everett Date: Wed, 1 Sep 2021 09:58:02 -0400 Subject: [PATCH 12/12] No such luck --- x-pack/qa/runtime-fields/build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/x-pack/qa/runtime-fields/build.gradle b/x-pack/qa/runtime-fields/build.gradle index e5f5c228e6e4a..d984bdc79629e 100644 --- a/x-pack/qa/runtime-fields/build.gradle +++ b/x-pack/qa/runtime-fields/build.gradle @@ -80,6 +80,9 @@ subprojects { 'search.aggregation/20_terms/Global ordinals are loaded with the global_ordinals execution hint', 'search.aggregation/170_cardinality_metric/profiler string', 'search.aggregation/235_composite_sorted/*', + // The error messages are different + 'search/330_fetch_fields/error includes field name', + 'search/330_fetch_fields/error includes glob pattern', /////// NOT SUPPORTED /////// ].join(',') }