Skip to content

Commit ca542fe

Browse files
authored
Don't output default values in text query xcontent representations (#86979)
This removes default values from the xcontent representations of the following queries: * intervals * combined_fields * match_bool_prefix * match_phrase_prefix * match_phrase * multi_match * query_string * simple_query_string
1 parent 2804ff4 commit ca542fe

15 files changed

+217
-98
lines changed

server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,16 @@ public class CombinedFieldsQueryBuilder extends AbstractQueryBuilder<CombinedFie
5959
private static final ParseField GENERATE_SYNONYMS_PHRASE_QUERY = new ParseField("auto_generate_synonyms_phrase_query");
6060
private static final ParseField ZERO_TERMS_QUERY_FIELD = new ParseField("zero_terms_query");
6161

62+
private static final Operator DEFAULT_OPERATOR = Operator.OR;
63+
private static final ZeroTermsQueryOption DEFAULT_ZERO_TERMS_QUERY = ZeroTermsQueryOption.NONE;
64+
private static final boolean DEFAULT_GENERATE_SYNONYMS_PHRASE = true;
65+
6266
private final Object value;
6367
private final Map<String, Float> fieldsAndBoosts;
64-
private Operator operator = Operator.OR;
68+
private Operator operator = DEFAULT_OPERATOR;
6569
private String minimumShouldMatch;
66-
private ZeroTermsQueryOption zeroTermsQuery = ZeroTermsQueryOption.NONE;
67-
private boolean autoGenerateSynonymsPhraseQuery = true;
70+
private ZeroTermsQueryOption zeroTermsQuery = DEFAULT_ZERO_TERMS_QUERY;
71+
private boolean autoGenerateSynonymsPhraseQuery = DEFAULT_GENERATE_SYNONYMS_PHRASE;
6872

6973
private static final ConstructingObjectParser<CombinedFieldsQueryBuilder, Void> PARSER = new ConstructingObjectParser<>(
7074
NAME,
@@ -257,13 +261,19 @@ public void doXContent(XContentBuilder builder, Params params) throws IOExceptio
257261
builder.value(fieldEntry.getKey() + "^" + fieldEntry.getValue());
258262
}
259263
builder.endArray();
260-
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
264+
if (operator != DEFAULT_OPERATOR) {
265+
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
266+
}
261267
if (minimumShouldMatch != null) {
262268
builder.field(MINIMUM_SHOULD_MATCH_FIELD.getPreferredName(), minimumShouldMatch);
263269
}
264-
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
265-
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
266-
printBoostAndQueryName(builder);
270+
if (zeroTermsQuery != DEFAULT_ZERO_TERMS_QUERY) {
271+
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
272+
}
273+
if (autoGenerateSynonymsPhraseQuery != DEFAULT_GENERATE_SYNONYMS_PHRASE) {
274+
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
275+
}
276+
boostAndQueryNameToXContent(builder);
267277
builder.endObject();
268278
}
269279

server/src/main/java/org/elasticsearch/index/query/IntervalQueryBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
6565
builder.field(field);
6666
builder.startObject();
6767
sourceProvider.toXContent(builder, params);
68-
printBoostAndQueryName(builder);
68+
boostAndQueryNameToXContent(builder);
6969
builder.endObject();
7070
builder.endObject();
7171
}

server/src/main/java/org/elasticsearch/index/query/MatchBoolPrefixQueryBuilder.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,20 +238,28 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
238238
if (analyzer != null) {
239239
builder.field(MatchQueryBuilder.ANALYZER_FIELD.getPreferredName(), analyzer);
240240
}
241-
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
241+
if (operator != DEFAULT_OPERATOR) {
242+
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
243+
}
242244
if (minimumShouldMatch != null) {
243245
builder.field(MatchQueryBuilder.MINIMUM_SHOULD_MATCH_FIELD.getPreferredName(), minimumShouldMatch);
244246
}
245247
if (fuzziness != null) {
246248
fuzziness.toXContent(builder, params);
247249
}
248-
builder.field(PREFIX_LENGTH_FIELD.getPreferredName(), prefixLength);
249-
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
250-
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
250+
if (prefixLength != FuzzyQuery.defaultPrefixLength) {
251+
builder.field(PREFIX_LENGTH_FIELD.getPreferredName(), prefixLength);
252+
}
253+
if (maxExpansions != FuzzyQuery.defaultMaxExpansions) {
254+
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
255+
}
256+
if (fuzzyTranspositions != FuzzyQuery.defaultTranspositions) {
257+
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
258+
}
251259
if (fuzzyRewrite != null) {
252260
builder.field(FUZZY_REWRITE_FIELD.getPreferredName(), fuzzyRewrite);
253261
}
254-
printBoostAndQueryName(builder);
262+
boostAndQueryNameToXContent(builder);
255263
builder.endObject();
256264
builder.endObject();
257265
}

server/src/main/java/org/elasticsearch/index/query/MatchPhrasePrefixQueryBuilder.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,16 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
169169
if (analyzer != null) {
170170
builder.field(MatchQueryBuilder.ANALYZER_FIELD.getPreferredName(), analyzer);
171171
}
172-
builder.field(MatchPhraseQueryBuilder.SLOP_FIELD.getPreferredName(), slop);
173-
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
174-
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
175-
printBoostAndQueryName(builder);
172+
if (slop != MatchQueryParser.DEFAULT_PHRASE_SLOP) {
173+
builder.field(MatchPhraseQueryBuilder.SLOP_FIELD.getPreferredName(), slop);
174+
}
175+
if (maxExpansions != FuzzyQuery.defaultMaxExpansions) {
176+
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
177+
}
178+
if (zeroTermsQuery != MatchQueryParser.DEFAULT_ZERO_TERMS_QUERY) {
179+
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
180+
}
181+
boostAndQueryNameToXContent(builder);
176182
builder.endObject();
177183
builder.endObject();
178184
}

server/src/main/java/org/elasticsearch/index/query/MatchPhraseQueryBuilder.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,13 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
145145
if (analyzer != null) {
146146
builder.field(MatchQueryBuilder.ANALYZER_FIELD.getPreferredName(), analyzer);
147147
}
148-
builder.field(SLOP_FIELD.getPreferredName(), slop);
149-
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
150-
printBoostAndQueryName(builder);
148+
if (slop != MatchQueryParser.DEFAULT_PHRASE_SLOP) {
149+
builder.field(SLOP_FIELD.getPreferredName(), slop);
150+
}
151+
if (zeroTermsQuery != MatchQueryParser.DEFAULT_ZERO_TERMS_QUERY) {
152+
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
153+
}
154+
boostAndQueryNameToXContent(builder);
151155
builder.endObject();
152156
builder.endObject();
153157
}

server/src/main/java/org/elasticsearch/index/query/MultiMatchQueryBuilder.java

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -527,17 +527,27 @@ public void doXContent(XContentBuilder builder, Params params) throws IOExceptio
527527
builder.value(fieldEntry.getKey() + "^" + fieldEntry.getValue());
528528
}
529529
builder.endArray();
530-
builder.field(TYPE_FIELD.getPreferredName(), type.toString().toLowerCase(Locale.ENGLISH));
531-
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
530+
if (type != DEFAULT_TYPE) {
531+
builder.field(TYPE_FIELD.getPreferredName(), type.toString().toLowerCase(Locale.ENGLISH));
532+
}
533+
if (operator != DEFAULT_OPERATOR) {
534+
builder.field(OPERATOR_FIELD.getPreferredName(), operator.toString());
535+
}
532536
if (analyzer != null) {
533537
builder.field(ANALYZER_FIELD.getPreferredName(), analyzer);
534538
}
535-
builder.field(SLOP_FIELD.getPreferredName(), slop);
539+
if (slop != DEFAULT_PHRASE_SLOP) {
540+
builder.field(SLOP_FIELD.getPreferredName(), slop);
541+
}
536542
if (fuzziness != null) {
537543
fuzziness.toXContent(builder, params);
538544
}
539-
builder.field(PREFIX_LENGTH_FIELD.getPreferredName(), prefixLength);
540-
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
545+
if (prefixLength != DEFAULT_PREFIX_LENGTH) {
546+
builder.field(PREFIX_LENGTH_FIELD.getPreferredName(), prefixLength);
547+
}
548+
if (maxExpansions != DEFAULT_MAX_EXPANSIONS) {
549+
builder.field(MAX_EXPANSIONS_FIELD.getPreferredName(), maxExpansions);
550+
}
541551
if (minimumShouldMatch != null) {
542552
builder.field(MINIMUM_SHOULD_MATCH_FIELD.getPreferredName(), minimumShouldMatch);
543553
}
@@ -550,10 +560,16 @@ public void doXContent(XContentBuilder builder, Params params) throws IOExceptio
550560
if (lenient != null) {
551561
builder.field(LENIENT_FIELD.getPreferredName(), lenient);
552562
}
553-
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
554-
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
555-
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
556-
printBoostAndQueryName(builder);
563+
if (zeroTermsQuery != DEFAULT_ZERO_TERMS_QUERY) {
564+
builder.field(ZERO_TERMS_QUERY_FIELD.getPreferredName(), zeroTermsQuery.toString());
565+
}
566+
if (autoGenerateSynonymsPhraseQuery != true) {
567+
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
568+
}
569+
if (fuzzyTranspositions != DEFAULT_FUZZY_TRANSPOSITIONS) {
570+
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
571+
}
572+
boostAndQueryNameToXContent(builder);
557573
builder.endObject();
558574
}
559575

server/src/main/java/org/elasticsearch/index/query/QueryStringQueryBuilder.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -571,31 +571,45 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
571571
builder.value(fieldEntry.getKey() + "^" + fieldEntry.getValue());
572572
}
573573
builder.endArray();
574-
if (this.type != null) {
574+
if (this.type != DEFAULT_TYPE) {
575575
builder.field(TYPE_FIELD.getPreferredName(), type.toString().toLowerCase(Locale.ENGLISH));
576576
}
577577
if (tieBreaker != null) {
578578
builder.field(TIE_BREAKER_FIELD.getPreferredName(), this.tieBreaker);
579579
}
580-
builder.field(DEFAULT_OPERATOR_FIELD.getPreferredName(), this.defaultOperator.name().toLowerCase(Locale.ROOT));
580+
if (defaultOperator != DEFAULT_OPERATOR) {
581+
builder.field(DEFAULT_OPERATOR_FIELD.getPreferredName(), this.defaultOperator.name().toLowerCase(Locale.ROOT));
582+
}
581583
if (this.analyzer != null) {
582584
builder.field(ANALYZER_FIELD.getPreferredName(), this.analyzer);
583585
}
584586
if (this.quoteAnalyzer != null) {
585587
builder.field(QUOTE_ANALYZER_FIELD.getPreferredName(), this.quoteAnalyzer);
586588
}
587-
builder.field(MAX_DETERMINIZED_STATES_FIELD.getPreferredName(), this.maxDeterminizedStates);
589+
if (this.maxDeterminizedStates != DEFAULT_MAX_DETERMINED_STATES) {
590+
builder.field(MAX_DETERMINIZED_STATES_FIELD.getPreferredName(), this.maxDeterminizedStates);
591+
}
588592
if (this.allowLeadingWildcard != null) {
589593
builder.field(ALLOW_LEADING_WILDCARD_FIELD.getPreferredName(), this.allowLeadingWildcard);
590594
}
591-
builder.field(ENABLE_POSITION_INCREMENTS_FIELD.getPreferredName(), this.enablePositionIncrements);
592-
this.fuzziness.toXContent(builder, params);
593-
builder.field(FUZZY_PREFIX_LENGTH_FIELD.getPreferredName(), this.fuzzyPrefixLength);
594-
builder.field(FUZZY_MAX_EXPANSIONS_FIELD.getPreferredName(), this.fuzzyMaxExpansions);
595+
if (this.enablePositionIncrements != DEFAULT_ENABLE_POSITION_INCREMENTS) {
596+
builder.field(ENABLE_POSITION_INCREMENTS_FIELD.getPreferredName(), this.enablePositionIncrements);
597+
}
598+
if (this.fuzziness != DEFAULT_FUZZINESS) {
599+
this.fuzziness.toXContent(builder, params);
600+
}
601+
if (this.fuzzyPrefixLength != DEFAULT_FUZZY_PREFIX_LENGTH) {
602+
builder.field(FUZZY_PREFIX_LENGTH_FIELD.getPreferredName(), this.fuzzyPrefixLength);
603+
}
604+
if (this.fuzzyMaxExpansions != DEFAULT_FUZZY_MAX_EXPANSIONS) {
605+
builder.field(FUZZY_MAX_EXPANSIONS_FIELD.getPreferredName(), this.fuzzyMaxExpansions);
606+
}
595607
if (this.fuzzyRewrite != null) {
596608
builder.field(FUZZY_REWRITE_FIELD.getPreferredName(), this.fuzzyRewrite);
597609
}
598-
builder.field(PHRASE_SLOP_FIELD.getPreferredName(), this.phraseSlop);
610+
if (this.phraseSlop != DEFAULT_PHRASE_SLOP) {
611+
builder.field(PHRASE_SLOP_FIELD.getPreferredName(), this.phraseSlop);
612+
}
599613
if (this.analyzeWildcard != null) {
600614
builder.field(ANALYZE_WILDCARD_FIELD.getPreferredName(), this.analyzeWildcard);
601615
}
@@ -614,10 +628,16 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
614628
if (this.timeZone != null) {
615629
builder.field(TIME_ZONE_FIELD.getPreferredName(), this.timeZone.getId());
616630
}
617-
builder.field(ESCAPE_FIELD.getPreferredName(), this.escape);
618-
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
619-
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
620-
printBoostAndQueryName(builder);
631+
if (this.escape != DEFAULT_ESCAPE) {
632+
builder.field(ESCAPE_FIELD.getPreferredName(), this.escape);
633+
}
634+
if (this.autoGenerateSynonymsPhraseQuery != true) {
635+
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), autoGenerateSynonymsPhraseQuery);
636+
}
637+
if (this.fuzzyTranspositions != DEFAULT_FUZZY_TRANSPOSITIONS) {
638+
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), fuzzyTranspositions);
639+
}
640+
boostAndQueryNameToXContent(builder);
621641
builder.endObject();
622642
}
623643

server/src/main/java/org/elasticsearch/index/query/SimpleQueryStringBuilder.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -433,24 +433,38 @@ protected void doXContent(XContentBuilder builder, Params params) throws IOExcep
433433
builder.field(ANALYZER_FIELD.getPreferredName(), analyzer);
434434
}
435435

436-
builder.field(FLAGS_FIELD.getPreferredName(), flags);
437-
builder.field(DEFAULT_OPERATOR_FIELD.getPreferredName(), defaultOperator.name().toLowerCase(Locale.ROOT));
436+
if (flags != DEFAULT_FLAGS) {
437+
builder.field(FLAGS_FIELD.getPreferredName(), flags);
438+
}
439+
if (defaultOperator != DEFAULT_OPERATOR) {
440+
builder.field(DEFAULT_OPERATOR_FIELD.getPreferredName(), defaultOperator.name().toLowerCase(Locale.ROOT));
441+
}
438442
if (lenientSet) {
439443
builder.field(LENIENT_FIELD.getPreferredName(), settings.lenient());
440444
}
441-
builder.field(ANALYZE_WILDCARD_FIELD.getPreferredName(), settings.analyzeWildcard());
445+
if (settings.analyzeWildcard() != DEFAULT_ANALYZE_WILDCARD) {
446+
builder.field(ANALYZE_WILDCARD_FIELD.getPreferredName(), settings.analyzeWildcard());
447+
}
442448
if (settings.quoteFieldSuffix() != null) {
443449
builder.field(QUOTE_FIELD_SUFFIX_FIELD.getPreferredName(), settings.quoteFieldSuffix());
444450
}
445451

446452
if (minimumShouldMatch != null) {
447453
builder.field(MINIMUM_SHOULD_MATCH_FIELD.getPreferredName(), minimumShouldMatch);
448454
}
449-
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), settings.autoGenerateSynonymsPhraseQuery());
450-
builder.field(FUZZY_PREFIX_LENGTH_FIELD.getPreferredName(), settings.fuzzyPrefixLength());
451-
builder.field(FUZZY_MAX_EXPANSIONS_FIELD.getPreferredName(), settings.fuzzyMaxExpansions());
452-
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), settings.fuzzyTranspositions());
453-
printBoostAndQueryName(builder);
455+
if (settings.autoGenerateSynonymsPhraseQuery() != true) {
456+
builder.field(GENERATE_SYNONYMS_PHRASE_QUERY.getPreferredName(), settings.autoGenerateSynonymsPhraseQuery());
457+
}
458+
if (settings.fuzzyPrefixLength() != DEFAULT_FUZZY_PREFIX_LENGTH) {
459+
builder.field(FUZZY_PREFIX_LENGTH_FIELD.getPreferredName(), settings.fuzzyPrefixLength());
460+
}
461+
if (settings.fuzzyMaxExpansions() != DEFAULT_FUZZY_MAX_EXPANSIONS) {
462+
builder.field(FUZZY_MAX_EXPANSIONS_FIELD.getPreferredName(), settings.fuzzyMaxExpansions());
463+
}
464+
if (settings.fuzzyTranspositions() != DEFAULT_FUZZY_TRANSPOSITIONS) {
465+
builder.field(FUZZY_TRANSPOSITIONS_FIELD.getPreferredName(), settings.fuzzyTranspositions());
466+
}
467+
boostAndQueryNameToXContent(builder);
454468
builder.endObject();
455469
}
456470

server/src/test/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilderTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ public void testValuesFromXContent() throws IOException {
7979
"combined_fields" : {
8080
"query" : "quick brown fox",
8181
"fields" : [ "abstract^1.0", "body^1.0", "title^1.0" ],
82-
"operator" : "OR",
83-
"zero_terms_query" : "NONE",
84-
"auto_generate_synonyms_phrase_query" : true,
82+
"operator" : "AND",
83+
"zero_terms_query" : "ALL",
84+
"auto_generate_synonyms_phrase_query" : false,
8585
"boost" : 2.0
8686
}
8787
}""";
@@ -91,7 +91,7 @@ public void testValuesFromXContent() throws IOException {
9191

9292
assertEquals(json, "quick brown fox", parsed.value());
9393
assertEquals(json, 3, parsed.fields().size());
94-
assertEquals(json, Operator.OR, parsed.operator());
94+
assertEquals(json, Operator.AND, parsed.operator());
9595
assertEquals(json, 2.0, parsed.boost, 1e-6);
9696
}
9797

server/src/test/java/org/elasticsearch/index/query/MatchBoolPrefixQueryBuilderTests.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,7 @@ public void testFromSimpleJson() throws IOException {
161161
{
162162
"match_bool_prefix": {
163163
"fieldName": {
164-
"query": "fieldValue",
165-
"operator": "OR",
166-
"prefix_length": 0,
167-
"max_expansions": 50,
168-
"fuzzy_transpositions": true,
169-
"boost": 1.0
164+
"query": "fieldValue"
170165
}
171166
}
172167
}""";

0 commit comments

Comments
 (0)