Skip to content

Commit

Permalink
Merge pull request #12756 from keety/terms_query_disable_coord
Browse files Browse the repository at this point in the history
Add support for `disable_coord` param to `terms` query
  • Loading branch information
jpountz committed Aug 11, 2015
2 parents 3c76e15 + 9a385de commit 99f4f09
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
Expand Up @@ -84,6 +84,8 @@ public Query parse(QueryParseContext parseContext) throws IOException, QueryPars
String lookupRouting = null;
String minShouldMatch = null;

boolean disableCoord = false;

XContentParser.Token token;
List<Object> terms = Lists.newArrayList();
String fieldName = null;
Expand Down Expand Up @@ -147,6 +149,8 @@ public Query parse(QueryParseContext parseContext) throws IOException, QueryPars
minShouldMatch = parser.textOrNull();
} else if ("boost".equals(currentFieldName)) {
boost = parser.floatValue();
} else if (("disable_coord").equals(currentFieldName) || ("disableCoord").equals(currentFieldName)) {
disableCoord = parser.booleanValue();
} else if ("_name".equals(currentFieldName)) {
queryName = parser.text();
} else {
Expand Down Expand Up @@ -191,7 +195,7 @@ public Query parse(QueryParseContext parseContext) throws IOException, QueryPars
query = new TermsQuery(fieldName, filterValues);
}
} else {
BooleanQuery bq = new BooleanQuery();
BooleanQuery bq = new BooleanQuery(disableCoord);
for (Object term : terms) {
if (fieldType != null) {
bq.add(fieldType.termQuery(term, parseContext), Occur.SHOULD);
Expand Down
Expand Up @@ -1074,6 +1074,33 @@ public void testTermsQuery() throws IOException {

assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("name.first", "test")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.SHOULD));

assertFalse("terms query disable_coord disabled by default", booleanQuery.isCoordDisabled());
}

@Test
public void testTermsQueryOptions() throws IOException {
IndexQueryParserService queryParser = queryParser();
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/terms-query-options.json");
Query parsedQuery = queryParser.parse(query).query();
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
BooleanClause[] clauses = booleanQuery.getClauses();

assertThat(clauses.length, equalTo(3));

assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("name.first", "shay")));
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.SHOULD));

assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("name.first", "test")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.SHOULD));

assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("name.first", "elasticsearch")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));

assertTrue("terms query disable_coord option mismatch", booleanQuery.isCoordDisabled());
assertThat(booleanQuery.getBoost(), equalTo(2.0f));
assertThat(booleanQuery.getMinimumNumberShouldMatch(), equalTo(2));
}

@Test
Expand Down
@@ -0,0 +1,8 @@
{
"terms":{
"name.first":["shay", "test", "elasticsearch"],
"disable_coord":true,
"boost":2.0,
"min_should_match":2
}
}

0 comments on commit 99f4f09

Please sign in to comment.