private void parseCandidateGenerator(
     XContentParser parser,
     SearchContext context,
     String fieldName,
     PhraseSuggestionContext.DirectCandidateGenerator generator)
     throws IOException {
   if (!SuggestUtils.parseDirectSpellcheckerSettings(parser, fieldName, generator)) {
     if ("field".equals(fieldName)) {
       generator.setField(parser.text());
     } else if ("size".equals(fieldName)) {
       generator.size(parser.intValue());
     } else if ("pre_filter".equals(fieldName) || "preFilter".equals(fieldName)) {
       String analyzerName = parser.text();
       Analyzer analyzer = context.mapperService().analysisService().analyzer(analyzerName);
       if (analyzer == null) {
         throw new ElasticSearchIllegalArgumentException(
             "Analyzer [" + analyzerName + "] doesn't exists");
       }
       generator.preFilter(analyzer);
     } else if ("post_filter".equals(fieldName) || "postFilter".equals(fieldName)) {
       String analyzerName = parser.text();
       Analyzer analyzer = context.mapperService().analysisService().analyzer(analyzerName);
       if (analyzer == null) {
         throw new ElasticSearchIllegalArgumentException(
             "Analyzer [" + analyzerName + "] doesn't exists");
       }
       generator.postFilter(analyzer);
     } else {
       throw new ElasticSearchIllegalArgumentException(
           "CandidateGenerator doesn't support [" + fieldName + "]");
     }
   }
 }