Skip to content

Commit 9e8b5e5

Browse files
committed
Query DSL: Bool query/filter to be valid JSON. Closes $6.
1 parent bc217d9 commit 9e8b5e5

File tree

5 files changed

+62
-30
lines changed

5 files changed

+62
-30
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/json/BoolJsonFilterParser.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,20 @@ public class BoolJsonFilterParser extends AbstractIndexComponent implements Json
6868
} else if ("should".equals(currentFieldName)) {
6969
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
7070
}
71+
} else if (token == JsonToken.START_ARRAY) {
72+
if ("must".equals(currentFieldName)) {
73+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
74+
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST));
75+
}
76+
} else if ("mustNot".equals(currentFieldName)) {
77+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
78+
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST_NOT));
79+
}
80+
} else if ("should".equals(currentFieldName)) {
81+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
82+
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
83+
}
84+
}
7185
}
7286
}
7387

modules/elasticsearch/src/main/java/org/elasticsearch/index/query/json/BoolJsonQueryParser.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,20 @@ public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQ
7171
} else if ("should".equals(currentFieldName)) {
7272
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
7373
}
74+
} else if (token == JsonToken.START_ARRAY) {
75+
if ("must".equals(currentFieldName)) {
76+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
77+
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST));
78+
}
79+
} else if ("mustNot".equals(currentFieldName)) {
80+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
81+
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST_NOT));
82+
}
83+
} else if ("should".equals(currentFieldName)) {
84+
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
85+
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
86+
}
87+
}
7488
} else if (token == JsonToken.VALUE_TRUE || token == JsonToken.VALUE_FALSE) {
7589
if ("disableCoord".equals(currentFieldName)) {
7690
disableCoord = token == JsonToken.VALUE_TRUE;

modules/elasticsearch/src/test/java/org/elasticsearch/index/query/json/SimpleJsonIndexQueryParserTests.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ public class SimpleJsonIndexQueryParserTests {
314314

315315
@Test public void testBoolQueryBuilder() throws IOException {
316316
IndexQueryParser queryParser = newQueryParser();
317-
Query parsedQuery = queryParser.parse(boolQuery().must(termQuery("content", "test1")).mustNot(termQuery("content", "test2")).should(termQuery("content", "test3")).must(termQuery("content", "test4")).build());
317+
Query parsedQuery = queryParser.parse(boolQuery().must(termQuery("content", "test1")).must(termQuery("content", "test4")).mustNot(termQuery("content", "test2")).should(termQuery("content", "test3")).build());
318318
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
319319
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
320320
BooleanClause[] clauses = booleanQuery.getClauses();
@@ -324,14 +324,14 @@ public class SimpleJsonIndexQueryParserTests {
324324
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("content", "test1")));
325325
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.MUST));
326326

327-
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
328-
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
327+
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
328+
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST));
329329

330-
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
331-
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
330+
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
331+
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
332332

333-
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
334-
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.MUST));
333+
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
334+
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
335335
}
336336

337337

@@ -348,14 +348,14 @@ public class SimpleJsonIndexQueryParserTests {
348348
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("content", "test1")));
349349
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.MUST));
350350

351-
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
352-
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
351+
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
352+
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST));
353353

354-
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
355-
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
354+
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
355+
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
356356

357-
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
358-
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.MUST));
357+
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
358+
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
359359
}
360360

361361
@Test public void testFilteredQueryBuilder() throws IOException {

modules/elasticsearch/src/test/java/org/elasticsearch/index/query/json/bool-filter.json

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@
55
},
66
filter : {
77
bool : {
8-
must : {
9-
term : { "name.first" : "shay1" }
10-
},
8+
must : [
9+
{
10+
term : { "name.first" : "shay1" }
11+
},
12+
{
13+
term : { "name.first" : "shay4" }
14+
}
15+
],
1116
mustNot: {
1217
term : { "name.first" : "shay2" }
1318
},
1419
should: {
1520
term : { "name.first" : "shay3" }
16-
},
17-
must : {
18-
term : { "name.first" : "shay4" }
1921
}
2022
}
2123
}
Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
{
22
bool : {
3-
must : {
4-
queryString : {
5-
defaultField : "content",
6-
query : "test1"
3+
must : [
4+
{
5+
queryString : {
6+
defaultField : "content",
7+
query : "test1"
8+
}
9+
},
10+
{
11+
queryString : {
12+
defaultField : "content",
13+
query : "test4"
14+
}
715
}
8-
},
16+
],
917
mustNot: {
1018
queryString : {
1119
defaultField : "content",
@@ -17,12 +25,6 @@
1725
defaultField : "content",
1826
query : "test3"
1927
}
20-
},
21-
must : {
22-
queryString : {
23-
defaultField : "content",
24-
query : "test4"
25-
}
2628
}
2729
}
2830
}

0 commit comments

Comments
 (0)