Browse Source

Clarified fielddata not supported for text fields error message (#89770)

Clarify where to start troubleshooting on fielddata not support for text fields error by reporting the field and index name.

Closes #89485

Co-authored-by: Luca Cavanna <javanna@users.noreply.github.com>
Youhei Sakurai 3 years ago
parent
commit
586d3fb13a

+ 6 - 0
docs/changelog/89770.yaml

@@ -0,0 +1,6 @@
+pr: 89770
+summary: Clarified fielddata not supported for text fields error message
+area: Mapping
+type: enhancement
+issues:
+ - 89485

+ 5 - 1
server/src/main/java/org/elasticsearch/index/mapper/TextFieldMapper.java

@@ -909,7 +909,11 @@ public class TextFieldMapper extends FieldMapper {
             } else if (operation == FielddataOperation.SEARCH) {
             } else if (operation == FielddataOperation.SEARCH) {
                 if (fielddata == false) {
                 if (fielddata == false) {
                     throw new IllegalArgumentException(
                     throw new IllegalArgumentException(
-                        "Text fields are not optimised for operations that require per-document "
+                        "Fielddata is disabled on ["
+                            + name()
+                            + "] in ["
+                            + fieldDataContext.fullyQualifiedIndexName()
+                            + "]. Text fields are not optimised for operations that require per-document "
                             + "field data like aggregations and sorting, so these operations are disabled by default. Please use a "
                             + "field data like aggregations and sorting, so these operations are disabled by default. Please use a "
                             + "keyword field instead. Alternatively, set fielddata=true on ["
                             + "keyword field instead. Alternatively, set fielddata=true on ["
                             + name()
                             + name()

+ 9 - 2
server/src/test/java/org/elasticsearch/index/mapper/TextFieldMapperTests.java

@@ -530,9 +530,16 @@ public class TextFieldMapperTests extends MapperTestCase {
         MapperService disabledMapper = createMapperService(fieldMapping(this::minimalMapping));
         MapperService disabledMapper = createMapperService(fieldMapping(this::minimalMapping));
         Exception e = expectThrows(
         Exception e = expectThrows(
             IllegalArgumentException.class,
             IllegalArgumentException.class,
-            () -> disabledMapper.fieldType("field").fielddataBuilder(FieldDataContext.noRuntimeFields("test"))
+            () -> disabledMapper.fieldType("field")
+                .fielddataBuilder(new FieldDataContext("index", null, null, MappedFieldType.FielddataOperation.SEARCH))
+        );
+        assertThat(
+            e.getMessage(),
+            containsString(
+                "Fielddata is disabled on [field] in [index]. "
+                    + "Text fields are not optimised for operations that require per-document field data"
+            )
         );
         );
-        assertThat(e.getMessage(), containsString("Text fields are not optimised for operations that require per-document field data"));
 
 
         MapperService enabledMapper = createMapperService(fieldMapping(b -> b.field("type", "text").field("fielddata", true)));
         MapperService enabledMapper = createMapperService(fieldMapping(b -> b.field("type", "text").field("fielddata", true)));
         enabledMapper.fieldType("field").fielddataBuilder(FieldDataContext.noRuntimeFields("test")); // no exception
         enabledMapper.fieldType("field").fielddataBuilder(FieldDataContext.noRuntimeFields("test")); // no exception