mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-24 17:09:48 +00:00
Query DSL: Bool query/filter to be valid JSON. Closes $6.
This commit is contained in:
parent
bc217d99ce
commit
9e8b5e5060
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user