From 2593b6e644330ca37d741b356cbd3a1a6c59ca33 Mon Sep 17 00:00:00 2001 From: Boaz Leskes Date: Thu, 17 Oct 2013 09:25:06 +0200 Subject: [PATCH] Terms facet will now throw a parsing exception if no field, fields or a script is supplied. Previously you'd get an NPE. Also added extra exception when called with unknown parameters. --- .../search/facet/terms/TermsFacetParser.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/elasticsearch/search/facet/terms/TermsFacetParser.java b/src/main/java/org/elasticsearch/search/facet/terms/TermsFacetParser.java index 703f107a8fd..5fb3bb5d6ab 100644 --- a/src/main/java/org/elasticsearch/search/facet/terms/TermsFacetParser.java +++ b/src/main/java/org/elasticsearch/search/facet/terms/TermsFacetParser.java @@ -22,6 +22,7 @@ package org.elasticsearch.search.facet.terms; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import org.apache.lucene.util.BytesRef; +import org.elasticsearch.ElasticSearchParseException; import org.elasticsearch.common.component.AbstractComponent; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.regex.Regex; @@ -103,6 +104,8 @@ public class TermsFacetParser extends AbstractComponent implements FacetParser { } else if (token == XContentParser.Token.START_OBJECT) { if ("params".equals(currentFieldName)) { params = parser.map(); + } else { + throw new ElasticSearchParseException("unknown parameter [" + currentFieldName + "] while parsing terms facet [" + facetName + "]"); } } else if (token == XContentParser.Token.START_ARRAY) { if ("exclude".equals(currentFieldName)) { @@ -117,6 +120,8 @@ public class TermsFacetParser extends AbstractComponent implements FacetParser { fields.add(parser.text()); } fieldsNames = fields.toArray(new String[fields.size()]); + } else { + throw new ElasticSearchParseException("unknown parameter [" + currentFieldName + "] while parsing terms facet [" + facetName + "]"); } } else if (token.isValue()) { if ("field".equals(currentFieldName)) { @@ -141,6 +146,8 @@ public class TermsFacetParser extends AbstractComponent implements FacetParser { scriptLang = parser.text(); } else if ("execution_hint".equals(currentFieldName) || "executionHint".equals(currentFieldName)) { executionHint = parser.textOrNull(); + } else { + throw new ElasticSearchParseException("unknown parameter [" + currentFieldName + "] while parsing terms facet [" + facetName + "]"); } } } @@ -185,10 +192,14 @@ public class TermsFacetParser extends AbstractComponent implements FacetParser { } return new FieldsTermsStringFacetExecutor(mappers.toArray(new FieldMapper[mappers.size()]), size, shardSize, comparatorType, allTerms, context, excluded, pattern, searchScript); } - if (field == null && fieldsNames == null && script != null) { + if (field == null && script != null) { return new ScriptTermsStringFieldFacetExecutor(size, shardSize, comparatorType, context, excluded, pattern, scriptLang, script, params, context.cacheRecycler()); } + if (field == null) { + throw new ElasticSearchParseException("terms facet [" + facetName + "] must have a field, fields or script parameter"); + } + FieldMapper fieldMapper = context.smartNameFieldMapper(field); if (fieldMapper == null) { return new UnmappedFieldExecutor(size, comparatorType);