Skip to content

Commit 644e5ea

Browse files
authored
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 08abbdf commit 644e5ea

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
@@ -66,6 +66,7 @@
6666
import static org.elasticsearch.common.lucene.search.Queries.newLenientFieldQuery;
6767
import static org.elasticsearch.common.lucene.search.Queries.newUnmappedFieldQuery;
6868
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingField;
69+
import static org.elasticsearch.index.search.QueryParserHelper.resolveMappingFields;
6970

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

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

+31
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,37 @@ public void testQuoteAnalyzer() throws Exception {
10401040
assertEquals(expectedQuery, query);
10411041
}
10421042

1043+
public void testQuoteFieldSuffix() throws IOException {
1044+
assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
1045+
QueryShardContext context = createShardContext();
1046+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME, "bar")),
1047+
new QueryStringQueryBuilder("bar")
1048+
.quoteFieldSuffix("_2")
1049+
.field(STRING_FIELD_NAME)
1050+
.doToQuery(context)
1051+
);
1052+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME_2, "bar")),
1053+
new QueryStringQueryBuilder("\"bar\"")
1054+
.quoteFieldSuffix("_2")
1055+
.field(STRING_FIELD_NAME)
1056+
.doToQuery(context)
1057+
);
1058+
1059+
// Now check what happens if the quote field does not exist
1060+
assertEquals(new TermQuery(new Term(STRING_FIELD_NAME, "bar")),
1061+
new QueryStringQueryBuilder("bar")
1062+
.quoteFieldSuffix(".quote")
1063+
.field(STRING_FIELD_NAME)
1064+
.doToQuery(context)
1065+
);
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+
}
1073+
10431074
public void testToFuzzyQuery() throws Exception {
10441075
assumeTrue("test runs only when at least a type is registered", getCurrentTypes().length > 0);
10451076

0 commit comments

Comments
 (0)