|  | @@ -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);
 |