diff --git a/server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java b/server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java index b12828a1093e9..e2cf9a82e2d13 100644 --- a/server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java +++ b/server/src/main/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilder.java @@ -29,6 +29,7 @@ import org.elasticsearch.common.io.stream.StreamOutput; import org.elasticsearch.common.lucene.search.Queries; import org.elasticsearch.common.xcontent.ConstructingObjectParser; +import org.elasticsearch.common.xcontent.ObjectParser.ValueType; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.index.mapper.MappedFieldType; @@ -75,7 +76,13 @@ public class CombinedFieldsQueryBuilder extends AbstractQueryBuilder { if ("none".equalsIgnoreCase(value)) { diff --git a/server/src/test/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilderTests.java index 120474622bb57..789b214ba71e2 100644 --- a/server/src/test/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/CombinedFieldsQueryBuilderTests.java @@ -88,4 +88,27 @@ public void testValuesFromXContent() throws IOException { assertEquals(json, Operator.OR, parsed.operator()); assertEquals(json, 2.0, parsed.boost, 1e-6); } + + /** + * We parse `minimum_should_match` to a String but other queries supporting this parameter also accept integer values and null + */ + public void testMinumumShouldMatchFromXContent() throws IOException { + Object[] testValues = new Object[] { 2, "\"2\"", "\"2%\"", null }; + Object[] expectedValues = new Object[] { "2", "2", "2%", null }; + int i = 0; + for (Object value : testValues) { + String json = "{\n" + + " \"combined_fields\" : {\n" + + " \"query\" : \"quick brown fox\",\n" + + " \"minimum_should_match\" : " + value + "\n" + + " }\n" + + "}"; + + CombinedFieldsQueryBuilder parsed = (CombinedFieldsQueryBuilder) parseQuery(json); + + assertEquals(json, "quick brown fox", parsed.value()); + assertEquals(json, expectedValues[i], parsed.minimumShouldMatch()); + i++; + } + } }