Skip to content

Commit

Permalink
Improve error message for parse failures of completion fields (#27297)
Browse files Browse the repository at this point in the history
Fix spacing/grammar/punctuation, and include the field name and location in the source document.
  • Loading branch information
DaveCTurner authored Nov 9, 2017
1 parent a34c2f0 commit 1c6f5ce
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
import org.apache.lucene.search.suggest.document.PrefixCompletionQuery;
import org.apache.lucene.search.suggest.document.RegexCompletionQuery;
import org.apache.lucene.search.suggest.document.SuggestField;
import org.elasticsearch.ElasticsearchParseException;
import org.elasticsearch.Version;
import org.elasticsearch.common.ParseField;
import org.elasticsearch.common.ParsingException;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.util.set.Sets;
Expand Down Expand Up @@ -560,7 +560,7 @@ private void parse(ParseContext parseContext, Token token, XContentParser parser
}
}
} else {
throw new ElasticsearchParseException("failed to parse expected text or object got" + token.name());
throw new ParsingException(parser.getTokenLocation(), "failed to parse [" + parser.currentName() + "]: expected text or object, but got " + token.name());
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,25 @@ public void testParsingMinimal() throws Exception {
assertSuggestFields(fields, 1);
}

public void testParsingFailure() throws Exception {
String mapping = jsonBuilder().startObject().startObject("type1")
.startObject("properties").startObject("completion")
.field("type", "completion")
.endObject().endObject()
.endObject().endObject().string();

DocumentMapper defaultMapper = createIndex("test").mapperService().documentMapperParser().parse("type1", new CompressedXContent(mapping));

MapperParsingException e = expectThrows(MapperParsingException.class, () ->
defaultMapper.parse(SourceToParse.source("test", "type1", "1", XContentFactory.jsonBuilder()
.startObject()
.field("completion", 1.0)
.endObject()
.bytes(),
XContentType.JSON)));
assertEquals("failed to parse [completion]: expected text or object, but got VALUE_NUMBER", e.getCause().getMessage());
}

public void testParsingMultiValued() throws Exception {
String mapping = jsonBuilder().startObject().startObject("type1")
.startObject("properties").startObject("completion")
Expand Down

0 comments on commit 1c6f5ce

Please sign in to comment.