Skip to content

Commit fff4e10

Browse files
committed
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
1 parent cdcd0d9 commit fff4e10

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
@@ -67,6 +67,7 @@
6767
import static org.elasticsearch.common.lucene.search.Queries.newLenientFieldQuery;
6868
import static org.elasticsearch.common.lucene.search.Queries.newUnmappedFieldQuery;
6969
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingField;
70+
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingFields;
7071

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

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

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

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

0 commit comments

Comments
 (0)