Query DSL: Bool query/filter to be valid JSON. Closes $6.

This commit is contained in:
kimchy 2010-02-12 15:20:46 +02:00
parent bc217d99ce
commit 9e8b5e5060
5 changed files with 62 additions and 30 deletions

View File

@ -68,6 +68,20 @@ public class BoolJsonFilterParser extends AbstractIndexComponent implements Json
} else if ("should".equals(currentFieldName)) {
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
}
} else if (token == JsonToken.START_ARRAY) {
if ("must".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST));
}
} else if ("mustNot".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST_NOT));
}
} else if ("should".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
}
}
}
}

View File

@ -71,6 +71,20 @@ public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQ
} else if ("should".equals(currentFieldName)) {
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
}
} else if (token == JsonToken.START_ARRAY) {
if ("must".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST));
}
} else if ("mustNot".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST_NOT));
}
} else if ("should".equals(currentFieldName)) {
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
}
}
} else if (token == JsonToken.VALUE_TRUE || token == JsonToken.VALUE_FALSE) {
if ("disableCoord".equals(currentFieldName)) {
disableCoord = token == JsonToken.VALUE_TRUE;

View File

@ -314,7 +314,7 @@ public class SimpleJsonIndexQueryParserTests {
@Test public void testBoolQueryBuilder() throws IOException {
IndexQueryParser queryParser = newQueryParser();
Query parsedQuery = queryParser.parse(boolQuery().must(termQuery("content", "test1")).mustNot(termQuery("content", "test2")).should(termQuery("content", "test3")).must(termQuery("content", "test4")).build());
Query parsedQuery = queryParser.parse(boolQuery().must(termQuery("content", "test1")).must(termQuery("content", "test4")).mustNot(termQuery("content", "test2")).should(termQuery("content", "test3")).build());
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
BooleanClause[] clauses = booleanQuery.getClauses();
@ -324,14 +324,14 @@ public class SimpleJsonIndexQueryParserTests {
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("content", "test1")));
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@ -348,14 +348,14 @@ public class SimpleJsonIndexQueryParserTests {
assertThat(((TermQuery) clauses[0].getQuery()).getTerm(), equalTo(new Term("content", "test1")));
assertThat(clauses[0].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
assertThat(((TermQuery) clauses[1].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
assertThat(clauses[1].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
assertThat(((TermQuery) clauses[2].getQuery()).getTerm(), equalTo(new Term("content", "test2")));
assertThat(clauses[2].getOccur(), equalTo(BooleanClause.Occur.MUST_NOT));
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test4")));
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.MUST));
assertThat(((TermQuery) clauses[3].getQuery()).getTerm(), equalTo(new Term("content", "test3")));
assertThat(clauses[3].getOccur(), equalTo(BooleanClause.Occur.SHOULD));
}
@Test public void testFilteredQueryBuilder() throws IOException {

View File

@ -5,17 +5,19 @@
},
filter : {
bool : {
must : {
term : { "name.first" : "shay1" }
},
must : [
{
term : { "name.first" : "shay1" }
},
{
term : { "name.first" : "shay4" }
}
],
mustNot: {
term : { "name.first" : "shay2" }
},
should: {
term : { "name.first" : "shay3" }
},
must : {
term : { "name.first" : "shay4" }
}
}
}

View File

@ -1,11 +1,19 @@
{
bool : {
must : {
queryString : {
defaultField : "content",
query : "test1"
must : [
{
queryString : {
defaultField : "content",
query : "test1"
}
},
{
queryString : {
defaultField : "content",
query : "test4"
}
}
},
],
mustNot: {
queryString : {
defaultField : "content",
@ -17,12 +25,6 @@
defaultField : "content",
query : "test3"
}
},
must : {
queryString : {
defaultField : "content",
query : "test4"
}
}
}
}