Skip to content

Commit df4b30f

Browse files
committed
Fix propagation of enablePositionIncrements in QueryStringQueryBuilder (elastic#43578)
This change fixes the propagation of the enablePositionIncrements option to the underlying QueryBuilder. Closes elastic#43574
1 parent 329d05f commit df4b30f

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ public Query parse(Type type, String fieldName, Object value) throws IOException
251251
Analyzer analyzer = getAnalyzer(fieldType, type == Type.PHRASE || type == Type.PHRASE_PREFIX);
252252
assert analyzer != null;
253253

254-
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType);
254+
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType, enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
255255

256256
/*
257257
* If a keyword analyzer is used, we know that further analysis isn't
@@ -357,15 +357,16 @@ class MatchQueryBuilder extends QueryBuilder {
357357
/**
358358
* Creates a new QueryBuilder using the given analyzer.
359359
*/
360-
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType) {
360+
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType,
361+
boolean enablePositionIncrements, boolean autoGenerateSynonymsPhraseQuery) {
361362
super(analyzer);
362363
this.fieldType = fieldType;
364+
setEnablePositionIncrements(enablePositionIncrements);
363365
if (hasPositions(fieldType)) {
364366
setAutoGenerateMultiTermSynonymsPhraseQuery(autoGenerateSynonymsPhraseQuery);
365367
} else {
366368
setAutoGenerateMultiTermSynonymsPhraseQuery(false);
367369
}
368-
setEnablePositionIncrements(enablePositionIncrements);
369370
}
370371

371372
@Override

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

+7-4
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

+6
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

+13-20
Original file line numberDiff line numberDiff line change
@@ -766,26 +766,6 @@ public void testToQueryRegExpQueryMaxDeterminizedStatesParsing() throws Exceptio
766766
assertThat(e.getMessage(), containsString("would result in more than 10 states"));
767767
}
768768

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

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

0 commit comments

Comments
 (0)