Skip to content

Commit b77a6fc

Browse files
authored
Fix propagation of enablePositionIncrements in QueryStringQueryBuilder (#43578)
This change fixes the propagation of the enablePositionIncrements option to the underlying QueryBuilder. Closes #43574
1 parent 0a0eb97 commit b77a6fc

File tree

4 files changed

+30
-27
lines changed

4 files changed

+30
-27
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,7 @@ public Query parse(Type type, String fieldName, Object value) throws IOException
238238
Analyzer analyzer = getAnalyzer(fieldType, type == Type.PHRASE || type == Type.PHRASE_PREFIX);
239239
assert analyzer != null;
240240

241-
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType);
241+
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType, enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
242242

243243
/*
244244
* If a keyword analyzer is used, we know that further analysis isn't
@@ -316,15 +316,16 @@ class MatchQueryBuilder extends QueryBuilder {
316316
/**
317317
* Creates a new QueryBuilder using the given analyzer.
318318
*/
319-
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType) {
319+
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType,
320+
boolean enablePositionIncrements, boolean autoGenerateSynonymsPhraseQuery) {
320321
super(analyzer);
321322
this.fieldType = fieldType;
323+
setEnablePositionIncrements(enablePositionIncrements);
322324
if (hasPositions(fieldType)) {
323325
setAutoGenerateMultiTermSynonymsPhraseQuery(autoGenerateSynonymsPhraseQuery);
324326
} else {
325327
setAutoGenerateMultiTermSynonymsPhraseQuery(false);
326328
}
327-
setEnablePositionIncrements(enablePositionIncrements);
328329
}
329330

330331
@Override

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,11 @@ private List<Query> buildCrossFieldQuery(MultiMatchQueryBuilder.Type type, Map<S
138138
for (Map.Entry<Analyzer, List<FieldAndBoost>> group : groups.entrySet()) {
139139
final MatchQueryBuilder builder;
140140
if (group.getValue().size() == 1) {
141-
builder = new MatchQueryBuilder(group.getKey(), group.getValue().get(0).fieldType);
141+
builder = new MatchQueryBuilder(group.getKey(), group.getValue().get(0).fieldType,
142+
enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
142143
} else {
143-
builder = new BlendedQueryBuilder(group.getKey(), group.getValue(), tieBreaker);
144+
builder = new BlendedQueryBuilder(group.getKey(), group.getValue(), tieBreaker,
145+
enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
144146
}
145147

146148
/*
@@ -170,8 +172,9 @@ private class BlendedQueryBuilder extends MatchQueryBuilder {
170172
private final List<FieldAndBoost> blendedFields;
171173
private final float tieBreaker;
172174

173-
BlendedQueryBuilder(Analyzer analyzer, List<FieldAndBoost> blendedFields, float tieBreaker) {
174-
super(analyzer, blendedFields.get(0).fieldType);
175+
BlendedQueryBuilder(Analyzer analyzer, List<FieldAndBoost> blendedFields, float tieBreaker,
176+
boolean enablePositionIncrements, boolean autoGenerateSynonymsPhraseQuery) {
177+
super(analyzer, blendedFields.get(0).fieldType, enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
175178
this.blendedFields = blendedFields;
176179
this.tieBreaker = tieBreaker;
177180
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ private QueryStringQueryParser(QueryShardContext context, String defaultField,
153153
this.lenient = lenient;
154154
}
155155

156+
@Override
157+
public void setEnablePositionIncrements(boolean enable) {
158+
super.setEnablePositionIncrements(enable);
159+
queryBuilder.setEnablePositionIncrements(enable);
160+
}
161+
156162
@Override
157163
public void setDefaultOperator(Operator op) {
158164
super.setDefaultOperator(op);

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

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -765,26 +765,6 @@ public void testToQueryRegExpQueryMaxDeterminizedStatesParsing() throws Exceptio
765765
assertThat(e.getMessage(), containsString("would result in more than 10 states"));
766766
}
767767

768-
/**
769-
* Validates that {@code max_determinized_states} can be parsed and lowers the allowed number of determinized states.
770-
*/
771-
public void testEnabledPositionIncrements() throws Exception {
772-
773-
XContentBuilder builder = JsonXContent.contentBuilder();
774-
builder.startObject(); {
775-
builder.startObject("query_string"); {
776-
builder.field("query", "text");
777-
builder.field("default_field", STRING_FIELD_NAME);
778-
builder.field("enable_position_increments", false);
779-
}
780-
builder.endObject();
781-
}
782-
builder.endObject();
783-
784-
QueryStringQueryBuilder queryBuilder = (QueryStringQueryBuilder) parseInnerQueryBuilder(createParser(builder));
785-
assertFalse(queryBuilder.enablePositionIncrements());
786-
}
787-
788768
public void testToQueryFuzzyQueryAutoFuziness() throws Exception {
789769
for (int i = 0; i < 3; i++) {
790770
final int len;
@@ -1438,6 +1418,19 @@ public void testWithStopWords() throws Exception {
14381418
assertEquals(expected, query);
14391419
}
14401420

1421+
public void testEnablePositionIncrement() throws Exception {
1422+
Query query = new QueryStringQueryBuilder("\"quick the fox\"")
1423+
.field(STRING_FIELD_NAME)
1424+
.analyzer("stop")
1425+
.enablePositionIncrements(false)
1426+
.toQuery(createShardContext());
1427+
PhraseQuery expected = new PhraseQuery.Builder()
1428+
.add(new Term(STRING_FIELD_NAME, "quick"))
1429+
.add(new Term(STRING_FIELD_NAME, "fox"))
1430+
.build();
1431+
assertEquals(expected, query);
1432+
}
1433+
14411434
public void testWithPrefixStopWords() throws Exception {
14421435
Query query = new QueryStringQueryBuilder("the* quick fox")
14431436
.field(STRING_FIELD_NAME)

0 commit comments

Comments
 (0)