mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-02-24 13:55:57 +00:00
Fix propagation of enablePositionIncrements in QueryStringQueryBuilder (#43578)
This change fixes the propagation of the enablePositionIncrements option to the underlying QueryBuilder. Closes #43574
This commit is contained in:
parent
329d05f61e
commit
df4b30fd8b
@ -251,7 +251,7 @@ public class MatchQuery {
|
||||
Analyzer analyzer = getAnalyzer(fieldType, type == Type.PHRASE || type == Type.PHRASE_PREFIX);
|
||||
assert analyzer != null;
|
||||
|
||||
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType);
|
||||
MatchQueryBuilder builder = new MatchQueryBuilder(analyzer, fieldType, enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
|
||||
|
||||
/*
|
||||
* If a keyword analyzer is used, we know that further analysis isn't
|
||||
@ -357,15 +357,16 @@ public class MatchQuery {
|
||||
/**
|
||||
* Creates a new QueryBuilder using the given analyzer.
|
||||
*/
|
||||
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType) {
|
||||
MatchQueryBuilder(Analyzer analyzer, MappedFieldType fieldType,
|
||||
boolean enablePositionIncrements, boolean autoGenerateSynonymsPhraseQuery) {
|
||||
super(analyzer);
|
||||
this.fieldType = fieldType;
|
||||
setEnablePositionIncrements(enablePositionIncrements);
|
||||
if (hasPositions(fieldType)) {
|
||||
setAutoGenerateMultiTermSynonymsPhraseQuery(autoGenerateSynonymsPhraseQuery);
|
||||
} else {
|
||||
setAutoGenerateMultiTermSynonymsPhraseQuery(false);
|
||||
}
|
||||
setEnablePositionIncrements(enablePositionIncrements);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -138,9 +138,11 @@ public class MultiMatchQuery extends MatchQuery {
|
||||
for (Map.Entry<Analyzer, List<FieldAndBoost>> group : groups.entrySet()) {
|
||||
final MatchQueryBuilder builder;
|
||||
if (group.getValue().size() == 1) {
|
||||
builder = new MatchQueryBuilder(group.getKey(), group.getValue().get(0).fieldType);
|
||||
builder = new MatchQueryBuilder(group.getKey(), group.getValue().get(0).fieldType,
|
||||
enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
|
||||
} else {
|
||||
builder = new BlendedQueryBuilder(group.getKey(), group.getValue(), tieBreaker);
|
||||
builder = new BlendedQueryBuilder(group.getKey(), group.getValue(), tieBreaker,
|
||||
enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -170,8 +172,9 @@ public class MultiMatchQuery extends MatchQuery {
|
||||
private final List<FieldAndBoost> blendedFields;
|
||||
private final float tieBreaker;
|
||||
|
||||
BlendedQueryBuilder(Analyzer analyzer, List<FieldAndBoost> blendedFields, float tieBreaker) {
|
||||
super(analyzer, blendedFields.get(0).fieldType);
|
||||
BlendedQueryBuilder(Analyzer analyzer, List<FieldAndBoost> blendedFields, float tieBreaker,
|
||||
boolean enablePositionIncrements, boolean autoGenerateSynonymsPhraseQuery) {
|
||||
super(analyzer, blendedFields.get(0).fieldType, enablePositionIncrements, autoGenerateSynonymsPhraseQuery);
|
||||
this.blendedFields = blendedFields;
|
||||
this.tieBreaker = tieBreaker;
|
||||
}
|
||||
|
@ -153,6 +153,12 @@ public class QueryStringQueryParser extends XQueryParser {
|
||||
this.lenient = lenient;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnablePositionIncrements(boolean enable) {
|
||||
super.setEnablePositionIncrements(enable);
|
||||
queryBuilder.setEnablePositionIncrements(enable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultOperator(Operator op) {
|
||||
super.setDefaultOperator(op);
|
||||
|
@ -766,26 +766,6 @@ public class QueryStringQueryBuilderTests extends AbstractQueryTestCase<QueryStr
|
||||
assertThat(e.getMessage(), containsString("would result in more than 10 states"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates that {@code max_determinized_states} can be parsed and lowers the allowed number of determinized states.
|
||||
*/
|
||||
public void testEnabledPositionIncrements() throws Exception {
|
||||
|
||||
XContentBuilder builder = JsonXContent.contentBuilder();
|
||||
builder.startObject(); {
|
||||
builder.startObject("query_string"); {
|
||||
builder.field("query", "text");
|
||||
builder.field("default_field", STRING_FIELD_NAME);
|
||||
builder.field("enable_position_increments", false);
|
||||
}
|
||||
builder.endObject();
|
||||
}
|
||||
builder.endObject();
|
||||
|
||||
QueryStringQueryBuilder queryBuilder = (QueryStringQueryBuilder) parseInnerQueryBuilder(createParser(builder));
|
||||
assertFalse(queryBuilder.enablePositionIncrements());
|
||||
}
|
||||
|
||||
public void testToQueryFuzzyQueryAutoFuziness() throws Exception {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
final int len;
|
||||
@ -1441,6 +1421,19 @@ public class QueryStringQueryBuilderTests extends AbstractQueryTestCase<QueryStr
|
||||
assertEquals(expected, query);
|
||||
}
|
||||
|
||||
public void testEnablePositionIncrement() throws Exception {
|
||||
Query query = new QueryStringQueryBuilder("\"quick the fox\"")
|
||||
.field(STRING_FIELD_NAME)
|
||||
.analyzer("stop")
|
||||
.enablePositionIncrements(false)
|
||||
.toQuery(createShardContext());
|
||||
PhraseQuery expected = new PhraseQuery.Builder()
|
||||
.add(new Term(STRING_FIELD_NAME, "quick"))
|
||||
.add(new Term(STRING_FIELD_NAME, "fox"))
|
||||
.build();
|
||||
assertEquals(expected, query);
|
||||
}
|
||||
|
||||
public void testWithPrefixStopWords() throws Exception {
|
||||
Query query = new QueryStringQueryBuilder("the* quick fox")
|
||||
.field(STRING_FIELD_NAME)
|
||||
|
Loading…
x
Reference in New Issue
Block a user