@Override
 protected QueryStringQueryBuilder doCreateTestQueryBuilder() {
   int numTerms = randomIntBetween(0, 5);
   String query = "";
   for (int i = 0; i < numTerms; i++) {
     // min length 4 makes sure that the text is not an operator (AND/OR) so toQuery won't break
     query +=
         (randomBoolean() ? STRING_FIELD_NAME + ":" : "")
             + randomAsciiOfLengthBetween(4, 10)
             + " ";
   }
   QueryStringQueryBuilder queryStringQueryBuilder = new QueryStringQueryBuilder(query);
   if (randomBoolean()) {
     queryStringQueryBuilder.defaultField(
         randomBoolean() ? STRING_FIELD_NAME : randomAsciiOfLengthBetween(1, 10));
   }
   if (randomBoolean()) {
     int numFields = randomIntBetween(1, 5);
     for (int i = 0; i < numFields; i++) {
       String fieldName = randomBoolean() ? STRING_FIELD_NAME : randomAsciiOfLengthBetween(1, 10);
       if (randomBoolean()) {
         queryStringQueryBuilder.field(fieldName);
       } else {
         queryStringQueryBuilder.field(fieldName, randomFloat());
       }
     }
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.defaultOperator(randomFrom(Operator.values()));
   }
   if (randomBoolean()) {
     // we only use string fields (either mapped or unmapped)
     queryStringQueryBuilder.fuzziness(randomFuzziness(STRING_FIELD_NAME));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.analyzer(randomAnalyzer());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.quoteAnalyzer(randomAnalyzer());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.allowLeadingWildcard(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.analyzeWildcard(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.maxDeterminizedStates(randomIntBetween(1, 100));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.lowercaseExpandedTerms(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.autoGeneratePhraseQueries(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.enablePositionIncrements(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.lenient(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.escape(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.phraseSlop(randomIntBetween(0, 10));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.fuzzyMaxExpansions(randomIntBetween(0, 100));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.fuzzyPrefixLength(randomIntBetween(0, 10));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.fuzzyRewrite(getRandomRewriteMethod());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.rewrite(getRandomRewriteMethod());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.quoteFieldSuffix(randomAsciiOfLengthBetween(1, 3));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.tieBreaker(randomFloat());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.minimumShouldMatch(randomMinimumShouldMatch());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.useDisMax(randomBoolean());
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.locale(randomLocale(getRandom()));
   }
   if (randomBoolean()) {
     queryStringQueryBuilder.timeZone(randomTimeZone());
   }
   return queryStringQueryBuilder;
 }