Skip to content

Commit 824c315

Browse files
jimczikcm
authored andcommitted
Fixed quote_field_suffix in query_string (#29332)
This change fixes the handling of the `quote_field_suffix` option on `query_string` query. The expansion was not applied to default fields query. Closes #29324 (cherry picked from commit 644e5ea)
1 parent ccec39f commit 824c315

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

server/src/main/java/org/elasticsearch/index/search/QueryStringQueryParser.java

+3
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import static org.elasticsearch.common.lucene.search.Queries.newLenientFieldQuery;
7070
import static org.elasticsearch.common.lucene.search.Queries.newUnmappedFieldQuery;
7171
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingField;
72+
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingFields;
7273

7374
/**
7475
* A {@link XQueryParser} that uses the {@link MapperService} in order to build smarter
@@ -266,6 +267,8 @@ private Map<String, Float> extractMultiFields(String field, boolean quoted) {
266267
// Filters unsupported fields if a pattern is requested
267268
// Filters metadata fields if all fields are requested
268269
return resolveMappingField(context, field, 1.0f, !allFields, !multiFields, quoted ? quoteFieldSuffix : null);
270+
} else if (quoted && quoteFieldSuffix != null) {
271+
return resolveMappingFields(context, fieldsAndWeights, quoteFieldSuffix);
269272
} else {
270273
return fieldsAndWeights;
271274
}

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

+31
Original file line numberDiff line numberDiff line change
@@ -1045,6 +1045,37 @@ public void testQuoteAnalyzer() throws Exception {
10451045
assertEquals(expectedQuery, query);
10461046
}
10471047

1048+
public void testQuoteFieldSuffix() throws IOException {
1049+
assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
1050+
QueryShardContext context = createShardContext();
1051+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME, "bar")),
1052+
new QueryStringQueryBuilder("bar")
1053+
.quoteFieldSuffix("_2")
1054+
.field(STRING_FIELD_NAME)
1055+
.doToQuery(context)
1056+
);
1057+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME_2, "bar")),
1058+
new QueryStringQueryBuilder("\"bar\"")
1059+
.quoteFieldSuffix("_2")
1060+
.field(STRING_FIELD_NAME)
1061+
.doToQuery(context)
1062+
);
1063+
1064+
// Now check what happens if the quote field does not exist
1065+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME, "bar")),
1066+
new QueryStringQueryBuilder("bar")
1067+
.quoteFieldSuffix(".quote")
1068+
.field(STRING_FIELD_NAME)
1069+
.doToQuery(context)
1070+
);
1071+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME, "bar")),
1072+
new QueryStringQueryBuilder("\"bar\"")
1073+
.quoteFieldSuffix(".quote")
1074+
.field(STRING_FIELD_NAME)
1075+
.doToQuery(context)
1076+
);
1077+
}
1078+
10481079
public void testToFuzzyQuery() throws Exception {
10491080
assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
10501081

0 commit comments

Comments
 (0)