Skip to content

Commit 1c6f5ce

Browse files
authored
Improve error message for parse failures of completion fields (#27297)
Fix spacing/grammar/punctuation, and include the field name and location in the source document.
1 parent a34c2f0 commit 1c6f5ce

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

core/src/main/java/org/elasticsearch/index/mapper/CompletionFieldMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
import org.apache.lucene.search.suggest.document.PrefixCompletionQuery;
3131
import org.apache.lucene.search.suggest.document.RegexCompletionQuery;
3232
import org.apache.lucene.search.suggest.document.SuggestField;
33-
import org.elasticsearch.ElasticsearchParseException;
3433
import org.elasticsearch.Version;
3534
import org.elasticsearch.common.ParseField;
35+
import org.elasticsearch.common.ParsingException;
3636
import org.elasticsearch.common.settings.Settings;
3737
import org.elasticsearch.common.unit.Fuzziness;
3838
import org.elasticsearch.common.util.set.Sets;
@@ -560,7 +560,7 @@ private void parse(ParseContext parseContext, Token token, XContentParser parser
560560
}
561561
}
562562
} else {
563-
throw new ElasticsearchParseException("failed to parse expected text or object got" + token.name());
563+
throw new ParsingException(parser.getTokenLocation(), "failed to parse [" + parser.currentName() + "]: expected text or object, but got " + token.name());
564564
}
565565
}
566566

core/src/test/java/org/elasticsearch/index/mapper/CompletionFieldMapperTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,25 @@ public void testParsingMinimal() throws Exception {
163163
assertSuggestFields(fields, 1);
164164
}
165165

166+
public void testParsingFailure() throws Exception {
167+
String mapping = jsonBuilder().startObject().startObject("type1")
168+
.startObject("properties").startObject("completion")
169+
.field("type", "completion")
170+
.endObject().endObject()
171+
.endObject().endObject().string();
172+
173+
DocumentMapper defaultMapper = createIndex("test").mapperService().documentMapperParser().parse("type1", new CompressedXContent(mapping));
174+
175+
MapperParsingException e = expectThrows(MapperParsingException.class, () ->
176+
defaultMapper.parse(SourceToParse.source("test", "type1", "1", XContentFactory.jsonBuilder()
177+
.startObject()
178+
.field("completion", 1.0)
179+
.endObject()
180+
.bytes(),
181+
XContentType.JSON)));
182+
assertEquals("failed to parse [completion]: expected text or object, but got VALUE_NUMBER", e.getCause().getMessage());
183+
}
184+
166185
public void testParsingMultiValued() throws Exception {
167186
String mapping = jsonBuilder().startObject().startObject("type1")
168187
.startObject("properties").startObject("completion")

0 commit comments

Comments
 (0)